我正在等待来自外部源的库的调试版本,他们已经发布了发布版本。
我们使用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变量吗?
答案 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})