- 1. CMakeLists.txt
- 2. config.h.in
- 3. main.cpp
- 4. Program output
- 5. UPD
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.
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)