2013-03-26 103 views
0

我目前正在尝试将cmake用于我的一个项目。 它的结构是相当微不足道的,由主文件夹和“库”子文件夹还包含标头和源文件:用cmake正确配置子目录

./   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.t xt主要添加源文件并调用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

你应该能够只是做你的主要的CMakeLists.txt如下:

add_definitions(-DDIMENSION=${DATASET_DIMENSION}) 

与你的问题是,COMPILE_DEFINITIONSa property of global scope,所以设置这没有任何影响。你可能会把它与directory-scope property混合?

+0

这似乎现在工作。谢谢! – Patrick 2013-03-28 13:48:45