Значения по умолчанию для CMAKE_FIND_LIBRARY_PREFIXES/CMAKE_FIND_LIBRARY_SUFFIXES
Я предполагаю, что я упускаю что-то очень очевидное здесь, но мне кажется, что переменные cmake CMAKE_FIND_LIBRARY_PREFIXES/CMAKE_FIND_LIBRARY_SUFFIXES
не установлены никакие "приличные" значения по умолчанию в зависимости от текущей системы / настроек! я проверил cmake docs и google, но на самом деле ничего об этом не видно.
например, простой CMakeLists.txt, по сути, вызывающий find_package(OpenSSL REQUIRED)
сломается, если вы не установите переменные в главном файле или не вызовете напрямую cmake -DCMAKE_FIND_LIBRARY_PREFIXES=lib -DCMAKE_FIND_LIBRARY_SUFFIXES=.so ..
(в Ubuntu с установленным openssl / libssl-dev), с другой стороны, значения по умолчанию PREFIX/SUFFIX для целей инициализируются "правильно" для каждой платформы, даже с учетом BUILD_SHARED_LIBS и т. д. Почему не для find_library?
Кто-нибудь знает, почему / как должно быть предложено (пользователи) поведение?
2 ответа
Переменные cmake CMAKE_FIND_LIBRARY_PREFIXES/CMAKE_FIND_LIBRARY_SUFFIXES не имеют никакого "приличного" значения по умолчанию
Почему ты так думаешь? Например:
cmake_minimum_required(VERSION 3.1)
project(Foo)
message("prefix: ${CMAKE_FIND_LIBRARY_PREFIXES}")
message("suffix: ${CMAKE_FIND_LIBRARY_SUFFIXES}")
Linux (Ubuntu):
prefix: lib
suffix: .so;.a
Mac:
prefix: lib
suffix: .dylib;.so;.a
Windows (Visual Studio):
prefix:
suffix: .lib
вызов find_package(OpenSSL REQUIRED) прервется, если вы не установите переменные в своем основном файле
Только что проверил, у меня отлично работает. Убунту 14.04. CMake 2.8.12.2 и CMake 3.1.0-rc2.
Поэтому я сам отвечу на этот вопрос еще раз, так как мне нужно больше места, чем позволяет комментарий.
"Что-то очевидное", которое я пропустил, заключается в том, что я получил доступ к этим значениям до вызова "project(Foo)", и на этом этапе CMAKE_FIND_LIBRARY_PREFIXES
а также CMAKE_FIND_LIBRARY_SUFFIXES
еще не инициализированы. приятно знать в любом случае!
Я проверял условия того, можно ли вообще построить основной проект, и это включало проверку, достаточно ли новая версия cmake и должна ли она быть загружена и собрана перед дальнейшими действиями. с другой стороны, согласно соглашению cmake, вам нужно указать, какая минимальная версия вам нужна, прежде чем вы начнете выполнять какие-либо команды проекта. Вы видите тупик там? поэтому, если мне нужно было создать новую версию cmake "на лету", следует включить OpenSSL, если это возможно. это было обнаружено с помощью find_package(OpenSSL)
, но это в свою очередь получило доступ к неинициализированному CMAKE_FIND_LIBRARY_PREFIXES
и все сломалось.