- 1. CMakeLists.txt
- 2. config.h.in
- 3. main.cpp
- 4. Висновок програми
- 5. UPD
Пропоную до розгляду варіант використання в C ++ коді змінних оголошених в CMakeLists.txt файлі.
Для початку, для чого це потрібно? Наприклад, ви хочете вказати версію програми і ще якусь службову інформацію, яка задається при складанні програми, але в той же час ви хочете використовувати цю інформацію і в вашому C++ коді? Чи можливо це зробити? Наприклад, щоб це виглядало так, як показано на малюнку.
CMakeLists.txt
Додавання таких змінних можна реалізувати через створення конфігураційного файлу з розширенням h.in в якому будуть визначені define директиви, які і додадуть констатни з CMakeLists.txt в C++. При цьому буде згенеровано відповідний заголовки.
cmake_minimum_required(VERSION 3.8) project(VariablesProject) # Додамо необхідні нам змінні set (VERSION_MAJOR 0) set (VERSION_MINOR 1) set (VERSION_PATCH 0) set (SOFT_VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}) # Вказуємо конфігураційний файл, з якого буде згенеровано заголовки configure_file(config.h.in config.h @ONLY) add_executable(${PROJECT_NAME} main.cpp) # додаємо директорію з заголовками файлами, щоб побачити згенерований файл 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" // Додаємо автоматично генерується конфігураційний файл int main() { // Используем переменые из 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 буде генеруватися в build директорії, якщо хочете його створювати в дірекеторіі вихідних кодів, то напишіть так
configure_file(config.h.in ${CMAKE_CURRENT_SOURCE_DIR}/config.h @ONLY)