В чистый файл CmakeLists.txt я помещаю следующее:
find_library (c c)
find_library (a c)
для соответствия синтаксису find_library(<var> <lib>)
Я запускаю cmake .
Я открываю CMakeCache.txt и обнаруживаю, что a был установлен с путем к libc, а c не был установлен вообще.
если я вместо этого использую set (c "text" CACHE STRING "")
, c будет установлено значение "text"
Почему я могу установить c с помощью set (), но не с помощью find_library ()?
Таким образом, это нормально работает в нескольких средах RHEL7 (где изначально был написан cmake), но не работает именно в среде Debian.
Я попробовал ваш пример, и, похоже, он работает нормально:
cmake_minimum_required(VERSION 2.4)
project(TestFindLibC NONE)
file(WRITE "libc.a" "")
find_library(
c
NAMES c
PATHS "${CMAKE_CURRENT_SOURCE_DIR}"
NO_DEFAULT_PATH
)
find_library(
a
NAMES c
PATHS "${CMAKE_CURRENT_SOURCE_DIR}"
NO_DEFAULT_PATH
)
message("c = ${c}")
message("a = ${c}")
Результаты в:
# cmake ..
c = [...]/libc.a
a = [...]/libc.a
Итак, я с @Tsyvarev, что ваши проблемы должны быть в не показанной части вашего кода CMake. Попробуйте добавить следующую команду в начало вашего основного файла CMakeLists.txt
для его отладки:
variable_watch(a)
Похоже, это проблема Debian, связанная с конкретной платформой.
Заданы ли вызовы (
find_library(a c)
иfind_library(a c)
): фактическипоследовательный, или между ними есть другие команды? Ни переменныеa
, ниc
не устанавливают в другом месте? Если это так, удалите файлCMakeCache.txt
и повторно запустите CMake. После этого у вас будут одинаково установлены переменныеa
иc
.