Значения по умолчанию для 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 и все сломалось.

Другие вопросы по тегам