CMake抱怨构建版本时找不到调试库

时间:2017-02-20 08:54:45

标签: cmake

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

我们使用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变量吗?

1 个答案:

答案 0 :(得分:0)

我试过了,你无法抑制这个错误。查看负责任的源代码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})