Evgenij LegotskojAug. 9, 2019, 6:09 p.m.

Using variables declared in CMakeLists.txt inside C ++ files

I propose to consider the option of using variables declared in the CMakeLists.txt file in C ++ code.

To begin with, what is it for? For example, you want to specify the version of the program and some other auxiliary information that is set during the assembly of the program, but at the same time you want to use this information in your C ++ code? Is it possible to do this? For example, to make it look like the image shows.

ADS

CMakeLists.txt

Adding such variables can be implemented by creating a configuration file with the extension h.in in which define directives will be defined, which will be added by constants from CMakeLists.txt in C ++. In this case, the corresponding header file will be generated.

cmake_minimum_required (VERSION 3.8)

project (VariablesProject)

# Add the variables we need
set (VERSION_MAJOR 0)
set (VERSION_MINOR 1)
set (VERSION_PATCH 0)
set (SOFT_VERSION $ {VERSION_MAJOR}. $ {VERSION_MINOR}. $ {VERSION_PATCH})

# Specify the configuration file from which the header file will be generated
configure_file (config.h.in config.h @ONLY)

add_executable ($ {PROJECT_NAME} main.cpp)

# add a directory with header files to see the generated file
include_directories ($ {CMAKE_CURRENT_BINARY_DIR})

config.h.in

The configuration file from which the header file config.h will be generated.

#ifndef CONFIG_H_IN
#define CONFIG_H_IN

#define PROJECT_NAME @ PROJECT_NAME @
#define VERSION_MAJOR "@ VERSION_MAJOR @"
#define VERSION_MINOR "@ VERSION_MINOR @"
#define VERSION_PATCH "@ VERSION_PATCH @"
#define SOFT_VERSION "@ SOFT_VERSION @"

#endif // CONFIG_H_IN

main.cpp

#include <iostream>

#include "config.h" // Add an automatically generated configuration file

int main ()
{
    // Use variables from CMakeLists.txt
    std :: cout << "project name:" << PROJECT_NAME << std :: endl;
    std :: cout << "version:" << SOFT_VERSION << std :: endl;
    std :: cout << "version major:" << VERSION_MAJOR << std :: endl;
    std :: cout << "version minor:" << VERSION_MINOR << std :: endl;
    std :: cout << "version patch:" << VERSION_PATCH << std :: endl;
    return 0;
}

Program output

We get the following output in the console as a result.

project name: VariablesProject
version: 0.1.0
version major: 0
version minor: 1
version patch: 0

UPD

The config.h file will be generated in the build directory, if you want to create it in the source directory, write this

configure_file(config.h.in ${CMAKE_CURRENT_SOURCE_DIR}/config.h @ONLY)
We recommend hosting TIMEWEB
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.
- company blog
Support the author Donate

Comments

Only authorized users can post comments.
Please, Log in or Sign up
Timeweb

Let me recommend you the excellent hosting on which EVILEG is located.

For many years, Timeweb has been proving his stability.

For projects on Django I recommend VDS hosting

View Hosting
s

C++ - Тест 003. Условия и циклы

  • Result:42points,
  • Rating points-8
e
  • enfant
  • Oct. 14, 2021, 2:59 p.m.

C++ - Test 002. Constants

  • Result:75points,
  • Rating points2
e
  • enfant
  • Oct. 14, 2021, 2:54 p.m.

C++ - Test 001. The first program and data types

  • Result:93points,
  • Rating points8
Popular publications in the last 90 Days
Last comments
s

Qt/C++ - Lesson 060. Configuring the appearance of the application in runtime

Добрый вечер, на "лету" не работает, только перезапуск
s

Qt/C++ - Lesson 060. Configuring the appearance of the application in runtime

Спасибо, завтра опробую и отпишусь по результату

Django - Tutorial 007. Adding Pagination based on django-bootstrap3

Просто список каких-нибудь объектов передавайте, который дёрнули ищ api стороннего сервера from django.core.paginator import Paginatorobjects = ['john', 'paul', 'george', 'ringo']p = Pagina…
b

PyQt5 - Tutorial 009. Using QThread with MoveToThread

Спасибо большое

PyQt5 - Tutorial 009. Using QThread with MoveToThread

Вызвать либо метод quit() либо эквивалентный его вариант - метод exit(0)
Now discuss on the forum
  • Nomad
  • Oct. 15, 2021, 6:39 a.m.

Вопрос из раздела "как реализовать"

Всем привет. Есть бизнес логика которую надо реализовать на джанге, она состоит в следующем: надо реализовать функционал регистрации/авторизации компаний у которого есть свой дашборд …

Проблема с созданием файлов перевода для составного проекта

Я имею ввиду, если у вас был старые ts файлы, то написать парсер, который составил бы словарь переводов. Например. "Hello world" - "Привет мир" "Hello dev" - "Привет dev" и…
k

QPsql Компиляция драйвера

при компиляции драйвера из окна Qt 5.15.2 (MSVC2019 64 ) надо было запустить C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\Build\vcvars64.bat тогда компиляция вып…
P
  • Pisych
  • Oct. 12, 2021, 10:59 p.m.

Фильтр в Select формы Django

Добрый день! Подскажите, как можно сделать? Есть форма, связанная с моделью. В форме Select, выбор типа документа (Приход, Расход,Списание). Этот Select берет данные из таблицы типов документов.…

Вызов функции Python с Qml

Чтобы onResult в QML подключилось к чему-то в Python, нужно чтобы result было сигналом, а у вас это слот. В качестве сигнала определено takeFunc и в данном случае в QML должно ра…
About
Services
© EVILEG 2015-2021
Recommend hosting TIMEWEB