【问题标题】:Properly configuring subdirectories with cmake使用 cmake 正确配置子目录
【发布时间】:2013-03-26 09:32:04
【问题描述】:

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

【问题讨论】:

    标签: linker cmake


    【解决方案1】:

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

    add_definitions(-DDIMENSION=${DATASET_DIMENSION})
    

    你的问题是COMPILE_DEFINITIONS不是a property of global scope,所以设置这个没有效果。您可能会将其与 directory-scope property 混淆?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-10
      • 2023-04-06
      • 2021-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多