如何让CMAKE在OSX上找到特定版本的lib curl?

时间:2017-11-30 01:31:57

标签: c++ macos c++11 curl cmake

问题是:如何让CMAKE设置/使CURL_INCLUDE_DIR为“/usr/local/Cellar/curl/7.75.0/include/”?

无论我做什么,CMAKE只能找到Xcode lib版本/位置。

我的CMAKE文件包含:

set(CURL_ROOT_DIR /usr/local/Cellar/curl/7.75.0/include/)
find_package(curl REQUIRED)
message(STATUS ">>> CURL Dir Found: " ${CURL_INCLUDE_DIR})

无论我尝试过什么,上面的CMAKE代码都会产生“CURL_INCLUDE_DIR”

  

“/应用/ Xcode.app /内容/开发商/平台/ MacOSX.platform /开发商/软件开发工具包/ MacOSX10.13.sdk的/ usr /包括

注意,使用“include(findcurl)”而不是“find_package(curl REQUIRED)”会得到相同的结果。

我已经使用了

  

set(CMAKE_CXX_FLAGS“-I / usr / local / Cellar / curl / 7.57.0 / include   -L / USR /本地/地窖/卷曲/ 7.57.0 / LIB“)

让CMAKE实际使用我想要的lib版本/位置。有没有更好的方法,我没有弄清楚?

1 个答案:

答案 0 :(得分:1)

cmake FindCURL模块(至少在我的版本中,3.5.1)没有在任何地方引用CURL_ROOT_DIR,所以我不相信设置该变量将有任何效果。

事实上,FindCURL模块非常基本,并且没有提供任何方法来自定义查看位置,这意味着它只能查看"标准"路径(例如/usr/lib/usr/local/lib等)

但是,您可以使用带有PATHS参数的find_library

set(CURL_PATH "/usr/local/Cellar/curl/7.75.0")

find_library(
        LIB_CURL
        NAMES
            curl
        PATHS 
            ${CURL_PATH}/lib)

此时您将拥有一个变量${LIB_CURL},该变量指向libcurl的位置

链接到库并设置包含路径:

然后,您可以直接链接到${LIB_CURL},并手动指定目标的包含路径,例如:

add_executable(
        foo
        main.cpp)

target_link_libraries(
        foo
        ${LIB_CURL})

target_include_directories(
        foo
        SYSTEM 
        PRIVATE "${CURL_PATH}/include")

IMPORTED图书馆目标:

另一个选择,如果你想要花哨,是使用IMPORTED创建${LIB_CURL}库目标,并在该目标上设置INTERFACE_INCLUDE_DIRECTORIES,以便消费者获得包含路径集自动。

add_library(
        libcurl 
        IMPORTED)

set_target_properties(
        libcurl 
        PROPERTIES 
            IMPORTED_LOCATION "${LIB_CURL}")

set_target_properties(
        libcurl 
        PROPERTIES
            INTERFACE_INCLUDE_DIRECTORIES "${CURL_PATH}/include")

现在您可以直接链接到目标libcurl,您的应用会自动更新其包含路径

add_executable(
        foo 
        main.cpp)

target_link_libraries(
        foo
        libcurl)