2016-02-22 3 views
1

Я использую новый вариант openssl, который я установил через Homebrew на своем Mac, и задавался вопросом, есть ли способ установить начальный путь для функции FIND_PACKAGE CMAKE? Прямо сейчас, когда я пытаюсь использовать FIND_PACKAGE CMAKE находит и старую версию openssl, которая используется моей ОС. В настоящее время я использую это в моем CMakeLists.txtНачальная траектория запуска CMake для FIND_PACKAGE?

SET(OPENSSL_LIB_DIR /usr/local/Cellar/openssl/1.0.2f/lib) 
INCLUDE_DIRECTORIES(/usr/local/Cellar/openssl/1.0.2f/include) 
TARGET_LINK_LIBRARIES(mangaMe ${OPENSSL_LIB_DIR}/libcrypto.dylib ${OPENSSL_LIB_DIR}/libssl.dylib) 

Единственная проблема, я с этим в том, что если мои OpenSSL обновлений я должен вручную обновить версию в пути. Я попытался прочитать документацию CMAKE FIND_PACKAGE, но не знаю, какую из многих переменных PATH я бы использовал, чтобы получить эффект, который я ищу.

ответ

3

Вы можете установить переменную OPENSSL_ROOT_DIR CMake или OPENSSL_ROOT_DIR переменную ENV по следующему пути: /usr/local/Cellar/openssl/*, а затем использовать find_package. Пример:

set(OPENSSL_ROOT_DIR /usr/local/Cellar/openssl/*) 
find_package(OpenSSL REQUIRED) 
include_directories(${OPENSSL_INCLUDE_DIR}) 
add_executable(${PROJECT_NAME} main.cpp) 
target_link_libraries(${PROJECT_NAME} ${OPENSSL_LIBRARIES}) 
+0

Работает для поиска библиотек, которые мне нужны для ссылки, но по какой-то причине не находит нужные мне файлы. Получение этой ошибки /usr/local/include/boost/asio/ssl/detail/openssl_types.hpp:19:10: фатальная ошибка: Файл «openssl/conf.h» не найден #include ^ 1 ошибка сгенерирована. – Jem4687

+0

@ Jem4687, показать вывод следующей команды: 'message (" OPENSSL_INCLUDE_DIR: "$ {OPENSSL_INCLUDE_DIR})' – ixSci

+0

Странно, что он работает сейчас. СПАСИБО СКОЛЬКО ДЛЯ ПОМОЩИ – Jem4687

2

Вы можете использовать OPENSSL_ROOT_DIR перед вызовом FindOpenSSL:

set(OPENSSL_ROOT_DIR /usr/local/Cellar/openssl/1.0.2f/) 
include(FindOpenSSL) 
+0

Это все еще требует от меня указать точную версию openssl, чего я пытаюсь избежать. – Jem4687

0

Cmake поставляется с модулем FindOpenSSL.cmake, который использует переменную OPENSSL_ROOT_DIR при поиске библиотек OpenSSL. Лучше использовать этот интерфейс, потому что он имеет обработку версий (major.minor, patch) и других связанных с ними libs-аллинга и т. Д.

Вы можете использовать его с помощью командной строки при вызове cmake или установить его в качестве других, ,

CMake -DOPENSSL_ROOT_DIR =/путь/к/OpenSSL ....

В общем, если вы пытаетесь найти другие библиотеки, для которых CMake по умолчанию moudules не предоставляет, вы можете использовать

НАМЕКИ, PATHS, PATH_SUFFIXES и другие переменные, такие как NO_DEFAULT_PATH (и другие NO_ *), говорят, что cmake не просматривает стандартные пути.

PATH = path to the location of library 
#this makes sense when PATH is pointed to the 'root' of the package location 
# for examle,path=/usr path_suffix=lib64 lib32 lib 
PATH_SUFFIXES = lib lib64 lib32 
NO_DEFAULT_PATH # Only look in above PATHs and nowhere else. 
Смежные вопросы