【问题标题】:How to make CMAKE find specific version of lib curl on OSX?如何让 CMAKE 在 OSX 上找到特定版本的 lib curl?
【发布时间】:2018-05-13 20:30:45
【问题描述】:

问题是:如何让 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”

"/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/usr/include

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

我已经添加了

set(CMAKE_CXX_FLAGS"-I/usr/local/Cellar/curl/7.57.0/include -L/usr/local/Cellar/curl/7.57.0/lib")

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

【问题讨论】:

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


    【解决方案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")
    

    导入库目标:

    另一个选项,如果你想花哨的话,是使用${LIB_CURL} 创建一个IMPORTED 库目标,并在该目标上设置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)
    

    【讨论】:

      猜你喜欢
      • 2015-10-08
      • 2016-02-27
      • 2018-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-18
      • 2015-01-12
      • 1970-01-01
      相关资源
      最近更新 更多