CMake设置FIND_PACKAGE的起始路径?

时间:2016-02-22 05:35:29

标签: c++ cmake

我正在使用我在Mac上通过Homebrew安装的更新版本的openssl,并且想知道是否有办法为CMAKE的FIND_PACKAGE函数设置启动路径?现在,当我尝试使用FIND_PACKAGE CMAKE查找我的操作系统使用的openssl的旧版本时。我目前在我的CMakeLists.txt中使用它

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 个答案:

答案 0 :(得分:5)

您可以将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})

答案 1 :(得分:4)

您可以在调用FindOpenSSL之前使用OPENSSL_ROOT_DIR

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

答案 2 :(得分:0)

Cmake附带FindOpenSSL.cmake模块,该模块在搜索openssl库时使用OPENSSL_ROOT_DIR变量。 最好使用该接口,因为它处理版本(major.minor,patch)和其他相关的libs hadling等。

您可以在调用cmake时通过命令行使用它,或者像其他人指向的那样在源代码中设置它。

cmake -DOPENSSL_ROOT_DIR = / path / to / openssl ....

一般情况下,如果您正在尝试查找未提供默认cmake moudules的其他库,则可以使用

HINTS,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.