【问题标题】:CMake complains about debug library not found when building releaseCMake 抱怨构建版本时未找到调试库
【发布时间】:2017-02-20 08:54:44
【问题描述】:

我正在等待来自外部源的库的调试版本,他们已经交付了发布版本。

我们使用 Find... 模块来定位库。现在结果如下:

optimized;libfoo.a;debug;foo-NOTFOUND

CMakeLists.txt 文件:

...
add_executable(main main.c)
target_link_libraries(main ${foo})

使用以下命令启动构建:

cmake source/dir -DCMAKE_BUILD_TYPE=Release

但是 cmake 仍然抱怨缺少调试库。

CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
foo
    linked by target "main" in directory source/dir

这是预期的行为吗?我可以在不更改我们的 Find 模块或在每次使用之前强制设置 foo 变量的情况下避免这个问题吗?

【问题讨论】:

    标签: cmake


    【解决方案1】:

    我已经尝试过了,但您无法抑制此错误。查看负责的源代码 cmGlobalGenerator::CheckTargetProperties() 仅使用 INTERFACE 链接库跳过此检查(您显然不希望这样做,因为它不会将任何内容链接到 main)。

    但是您可以声明一个占位符 IMPORTED 库的名称导致错误,例如:

    add_library(foo-NOTFOUND STATIC IMPORTED)
    

    为了重现您的问题并测试修复,我设置了以下CMakeLists.txt

    cmake_minimum_required(VERSION 3.3)
    project(FooNotFound)
    cmake_policy(SET CMP0057 NEW)
    
    set(foo "optimized;libfoo.a;debug;foo-NOTFOUND")
    file(WRITE main.c "int main(void) { return 0; }")
    
    if ("foo-NOTFOUND" IN_LIST foo)
        add_library(foo-NOTFOUND STATIC IMPORTED)
    endif()
    
    add_executable(main main.c)
    target_link_libraries(main INTERFACE ${foo})
    

    【讨论】:

      猜你喜欢
      • 2020-06-22
      • 1970-01-01
      • 1970-01-01
      • 2016-02-16
      • 1970-01-01
      • 1970-01-01
      • 2019-01-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多