将CMake变量传递给C++源代码[重复]

bis0qfac  于 2023-04-08  发布在  其他
关注(0)|答案(3)|浏览(143)

此问题已在此处有答案

How to read a CMake Variable in C++ source code(1个答案)
9年前关闭。
首先,我已经读了How to read a CMake Variable in C++ source code,我不知道它是否能帮助我。
第二,我的问题。顶级CMakeLists.txt说SET( MY_VAR /some/path ),在顶级source.cpp中,我需要以某种方式实现一个包含/some/path/to/filesstd::string,自然使用MY_VAR值。

ffx8fchx

ffx8fchx1#

add_executable(myexe main.cpp)
if (MY_VAR)
    target_compile_definitions(myexe PRIVATE MY_VAR=${MY_VAR})
endif()

编辑:然后变量将在C++代码中可用:

#ifdef MY_VAR
std::cout << MY_VAR << std::endl;
#endif
ifsvaxew

ifsvaxew2#

你可以使用configure_file(filename output_file)命令。它用cmake变量VARIABLE的实际值替换文件filename中的${VARIABLE}@VARIABLE@,并将结果写入output_file
所以,你可以这样写

// in C++ code
std::string my_var = "@MY_VAR@";

# in CMakeLists.txt
configure_file(filename.h.in filename.h)

另外,我认为在构建目录中的某个地方生成输出文件是一个好主意(并将其包含目录添加到包含路径)。
configure_file in cmake文档

cgfeq70w

cgfeq70w3#

在编译过程中传入值的唯一方法是传入一个宏。例如,如果CMake设置了一个名为$(MY_VAR)的宏(就像make(1)一样):

g++ -DMY_VAR=$(MY_VAR) .... xxx.cc

并且xxx.cc按照其意愿使用MY_VAR

相关问题