2017-02-20 93 views
1

我正在等待来自外部源的库的调试版本,他们已经提供了发布版本。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 

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

回答

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}) 
相关问题