Evgenii Legotckoi
Там. 10, 2019, 4:09 Т.Ж.

C++ файлдарының ішінде CMakeLists.txt ішінде жарияланған айнымалы мәндерді пайдалану

Предлагаю рассмотреть вариант использования переменных, объявленных в файле 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)

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

Пікірлер

Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
Кіріңіз немесе Тіркеліңіз