我试图在一些源文件中添加一些编译定义,所以我进行如下配置:
set_property(
SOURCE main.cpp
APPEND
PROPERTY
COMPILE_DEFINITIONS "VERSION=3"
)
,我使用make VERBOSE=1
来检查配置,但是在编译-DVERSION=3
时不存在main.cpp.o
或类似的东西。
然后我再次尝试:
set_property(
DIRECTORY
APPEND
PROPERTY
COMPILE_DEFINITIONS "VERSION=3"
)
然后我得到-DVERSION=3
。为什么set_property()
对SOURCE
不起作用?我已经在CMake 2.8.12和CMake 3.10中使用GNU Makefile生成器进行了尝试。
答案 0 :(得分:1)
使用set_property(SOURCE ...)
签名时,具有相对路径的源文件将被解释为相对于当前CMakeLists.txt文件。因此,指定相对路径时,文件main.cpp
必须与当前CMakeLists.txt文件位于同一目录中。尽可能使用绝对路径永远是最安全的(为了避免诸如此类的问题)
set_property(
SOURCE ${CMAKE_CURRENT_LIST_DIR}/main.cpp
APPEND
PROPERTY
COMPILE_DEFINITIONS "VERSION=3"
)
set_property(SOURCE ...)
命令的另一个要求如下(来自documentation):
SOURCE
范围可以命名零个或多个源文件。 请注意,源文件属性仅对添加到同一目录(
CMakeLists.txt
)中的目标可见。
因此,必须在调用源文件上的set_property()
的同一CMakeLists.txt文件中定义使用源文件 的CMake目标。