Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linker 使用cmake正确配置子目录_Linker_Cmake - Fatal编程技术网

Linker 使用cmake正确配置子目录

Linker 使用cmake正确配置子目录,linker,cmake,Linker,Cmake,我目前正试图将cmake用于我的一个项目。 它的结构非常简单,由主文件夹和“library”子文件夹组成,其中还包含标题和源文件: ./ sourceA.cpp ... ./lib/ sourceB.cpp headerB.cpp ... 我希望让用户定义一些常量,然后预处理器应该使用这些常量来替换一些占位符,例如:char data[DIMENSION] 在主目录中,我使用以下CMakeLists.txt请求并设置值: ... set(DATASET_DI

我目前正试图将
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
,编译器会抱怨
维度
没有被替换:

.../lib/someheader.h:7:19:error: ‘DIMENSION’ undeclared here (not in a function)
我的配置有什么问题?我试着按照cmake的例子来说明(我的重点):

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


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

add_definitions(-DDIMENSION=${DATASET_DIMENSION})
您的问题是
COMPILE\u DEFINITIONS
不是,因此设置此选项无效。你可能把这和我搞混了