我目前正在尝试用于我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.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 文件,然后下降到列出的子目录中。变量、包含路径、库路径等都是继承的。