CMake set_property()似乎不适用于源文件

时间:2019-11-12 07:10:59

标签: cmake

我试图在一些源文件中添加一些编译定义,所以我进行如下配置:

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生成器进行了尝试。

1 个答案:

答案 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目标。