- 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)