- 1. CMakeLists.txt
- 2. config.h.in
- 3. main.cpp
- 4. Вывод программы
- 5. UPD
Предлагаю рассмотреть вариант использования переменных, объявленных в файле CMakeLists.txt, в коде на C++.
Для начала, для чего это? Например, вы хотите указать версию программы и какую-то другую вспомогательную информацию, которая задается при сборке программы, но при этом хотите использовать эту информацию в своем коде на C++? Можно ли сделать это? Например, сделать так, как показано на картинке.
CMakeLists.txt
Добавление таких переменных может быть реализовано путем создания конфигурационного файла с расширением h.in , в котором будут определены директивы define , в которые будут добавляться константы из CMakeLists.txt на C++. В этом случае будет сгенерирован соответствующий заголовочный файл.
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
Конфигурационный файл, из которого будет сформирован заголовочный файл config.h .
#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; }
Вывод программы
В результате получаем следующий вывод в консоли.
project name: VariablesProject version: 0.1.0 version major: 0 version minor: 1 version patch: 0
UPD
Файл config.h будет сгенерирован в каталоге сборки, если вы хотите создать его в каталоге исходников, напишите это
configure_file(config.h.in ${CMAKE_CURRENT_SOURCE_DIR}/config.h @ONLY)