首先,我已经阅读了How to read a CMake Variable in C++ source code,我真的不知道它是否可以帮助我。
第二,我的问题。顶级CMakeLists.txt表示SET( MY_VAR /some/path )
,在顶级source.cpp中我需要以某种方式实现std::string
包含/some/path/to/files
自然使用MY_VAR
值。
答案 0 :(得分:5)
您可以使用configure_file(filename output_file)
命令。它会将文件${VARIABLE}
中的@VARIABLE@
或filename
替换为cmake变量VARIABLE
的实际值,并将结果写入output_file
。
所以,你可以写一些像
这样的东西// in C++ code
std::string my_var = "@MY_VAR@";
# in CMakeLists.txt
configure_file(filename.h.in filename.h)
另外,我认为在构建目录中的某个地方生成输出文件是个好主意(并且它包含添加到包含路径的目录)。
答案 1 :(得分:2)
add_executable(myexe main.cpp)
if (MY_VAR)
target_compile_definitions(myexe PRIVATE MY_VAR=${MY_VAR})
endif()
答案 2 :(得分:-1)
在编译期间传递值的唯一方法是传递宏。例如,如果CMake设置了一个名为$(MY_VAR)
的宏(如make(1)
那样):
g++ -DMY_VAR=$(MY_VAR) .... xxx.cc
和xxx.cc
根据需要使用MY_VAR
。