Как использовать CMake для генерации кода C ++, когда не используется файл configure_file? - PullRequest
0 голосов
/ 01 октября 2018

Мои CMake скрипты генерируют некоторую информацию, которую я хочу в своем коде C ++.Информация - это некоторый текст, который я хочу, чтобы пользователь мог видеть.

Я знаю, что могу определить в своем коде переменные C ++, например: @mySpecialVariable@.Если эти переменные определены CMake, то при использовании configure_file исходный файл изменяется в зависимости от того, какое значение mySpecialVariable определено CMake.

Моя проблема в том, что я никогда не используюconfigure_file.Мой каталог сборки отделен от моего исходного каталога, но исходные файлы никогда не копируются (то есть configure_file) из исходного каталога в каталог сборки.

Есть ли способ сделать это без использования configure_file?

1 Ответ

0 голосов
/ 03 октября 2018

CMake 3.12 имеет новую функцию под названием add_compiler_definitions , которая должна соответствовать вашим потребностям.

Минимальный пример:

CMakeLists.txt

cmake_minimum_required(VERSION 3.12)
project(cmake_text)
set(MyCMakeVar "MySpecialText")
add_compile_definitions(CMAKE_TEXT="${MyCMakeVar}")
add_executable(cmake_text main.cpp)

main.cpp

#include <iostream>

int main(int argc, char** argv)
{
#ifdef CMAKE_TEXT
    std::cout << "Cmake defined following text: " << CMAKE_TEXT << std::endl;
#else
    std::cout << "CMake did not define any text!" << std::endl;
#endif
    return 0;
}

Вывод на стандартный вывод будет:

Cmake определил следующий текст: MySpecialText

...