2017-02-20 12 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})