Я использую cmake find_package, чтобы найти библиотеку JPEG, которая будет использоваться в моем приложении.У меня есть две установки этой библиотеки: системная, расположенная по адресу:
libjpeg: /usr/lib/x86_64-linux-gnu/libjpeg.a /usr/lib/x86_64-linux-gnu/libjpeg.so
, и другая пользовательская, расположенная по адресу:
/my/jpeg/instalation/lib/libjpeg.so
, и я хочу решить, какую версию следует использоватьпо командной строке.
Например, для использования пользовательской команды my cmake:
cmake .. -DCMAKE_PREFIX_PATH=/my/jpeg/instalation
и для поиска только системных команд команда cmake будет:
cmake ..
и мой CMakeLists.txt имеет что-то вроде этого, когда определено CMAKE_PREFIX_PATH:
find_package(JPEG NO_SYSTEM_ENVIRONMENT_PATH REQUIRED)
и когда не определено CMAKE_PREFIX_PATH:
find_package(JPEG REQUIRED)
Но с NO_SYSTEM_ENVIRONMENT_PATH не найдено ни одной библиотекиЯ предполагал, что с этим флагом системные пути были проигнорированы, но кажется, что те, которые объявлены в CMAKE_PREFIX_PATH, также отбрасываются ...
В основном я хочу, когда CMAKE_PREFIX_PATH указано, что системные библиотеки не рассматриваются икогда CMAKE_PREFIX_PATH не указан, системные библиотеки должны быть рассмотрены ...
единственный способ, которым я вижу, что это работает для пользовательских путей, этосделать что-то вроде этого:
find_package(JPEG PATHS ${CMAKE_PREFIX_PATH} NO_DEFAULT_PATH)
но это также не находит ... я полностью потерян с этим поведением find_package ...
PS: я использую версию cmake3.10.2 и ошибка всегда:
CMake Error at CMakeLists.txt:7 (find_package):
Could not find a package configuration file provided by "JPEG" with any of
the following names:
JPEGConfig.cmake
jpeg-config.cmake
Add the installation prefix of "JPEG" to CMAKE_PREFIX_PATH or set
"JPEG_DIR" to a directory containing one of the above files. If "JPEG"
provides a separate development package or SDK, be sure it has been
installed.
Обновление
Я не смог понять, что значения find_package предназначены только для функции find_package, то есть для поиска FindJPEG.сценарии cmake или JPEGconfig.cmake, а не содержимое этих сценариев.То, что я хочу, выполняется только с использованием определенных функций, которые находят пути или файлы, как, например, в примере с Томом, но с использованием find_library следующим образом:
set(CUSTOM_JPEG_PATH ON CACHE BOOL "use only custom paths")
set(JPEG_NAMES ${JPEG_NAMES} jpeg libjpeg)
if(CUSTOM_JPEG_PATH)
#find_package(JPEG REQUIRED
find_library(JPEG_LIBRARY NAMES ${JPEG_NAMES}
NO_SYSTEM_ENVIRONMENT_PATH
NO_CMAKE_SYSTEM_PATH
)
else()
#find_package(JPEG REQUIRED
find_library(JPEG_LIBRARY NAMES ${JPEG_NAMES}
)
endif()
И это работает как ожидалось (вместо того, чтобы задавать корневую папкуВыборочная установка Мне нужно указать точное местоположение - / my / jpeg / instalation / lib - чтобы работать).Но это не то, что я хочу, я не хочу переписывать все сценарии FindXXX.cmake, чтобы получить то, что я хочу, эти сценарии поиска содержат более подробную информацию о их зависимостях, флагах компиляции и т. Д., Поэтому я предполагаю,нет способа делать то, что я хочу, используя только find_package (...) ...