使用cmake正确配置子目录

时间:2013-03-26 09:32:04

标签: linker cmake

我目前正在尝试将cmake用于我的项目。 它的结构非常简单,包括主文件夹和包含标题和源文件的'library'子文件夹:

./            sourceA.cpp ...
./lib/        sourceB.cpp headerB.cpp ...

我希望让用户定义一些常量,然后预处理器应该使用这些常量替换一些占位符,例如:char data[DIMENSION]

在主目录中,我使用以下CMakeLists.txt来询问值并进行设置:

...
set(DATASET_DIMENSION "4" CACHE STRING "The dimensions of the dataset used.")
set_property(
    GLOBAL
    PROPERTY COMPILE_DEFINITIONS DIMENSION=${DATASET_DIMENSION}
    APPEND
)
add_subdirectory(lib)
...

在子目录中,CMakeLists.txt主要添加源文件并调用add_library(lib ${lib_SOURCES})

问题:如果我执行make,编译器会抱怨DIMENSION没有被替换:

.../lib/someheader.h:7:19:error: ‘DIMENSION’ undeclared here (not in a function)

我的配置有什么问题?我试着按照他们指定的cmake示例(我的重点):

  

在顶级目录中执行时,CMake将处理CMakeLists.txt文件,然后下载到列出的子目录中。 变量,包括路径,库路径等。是继承的

1 个答案:

答案 0 :(得分:1)

您应该可以在主CMakeLists.txt中执行以下操作:

add_definitions(-DDIMENSION=${DATASET_DIMENSION})

您的问题是COMPILE_DEFINITIONS不是a property of global scope,因此设置此项无效。您可能会将其与directory-scope property混合使用吗?