2016-02-22 183 views
1

我使用的是一個較新的openssl verion,我通過Homebrew在我的Mac上安裝,並想知道是否有方法爲CMAKE的FIND_PACKAGE函數設置啓動路徑?現在,當我嘗試使用我的操作系統使用的FIND_PACKAGE CMAKE查找和較舊版本的openssl時。我目前在我的CMakeLists.txtCMake設置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環境變量設置爲以下路徑:/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

您可以調用FindOpenSSL使用前OPENSSL_ROOT_DIR

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

這仍然需要我指定openssl的確切版本,這正是我想要避免的。 – Jem4687

0

CMake的配備與使用OPENSSL_ROOT_DIR變量OpenSSL庫搜索時FindOpenSSL.cmake模塊。 最好使用該接口,因爲它具有處理版本(major.minor,patch)和其他相關庫的哈靈等。

您可以在調用cmake時通過命令行使用它,或者像其他人指出的那樣在源中設置它。

cmake的-DOPENSSL_ROOT_DIR = /路徑/要/ OpenSSL的....

一般來說,如果你正在努力尋找提供了缺省的cmake moudules不提供其他庫,你可以使用

提示, PATH,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.