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

C++ 如何让CMAKE在OSX上查找特定版本的lib curl?,c++,macos,c++11,curl,cmake,C++,Macos,C++11,Curl,Cmake,问题是:如何让CMAKE设置/使CURL\u INCLUDE\u DIR为“/usr/local/cillar/CURL/7.75.0/INCLUDE/” 不管我做什么,CMAKE只会找到Xcode库的版本/位置 我的CMAKE文件包含: set(CURL_ROOT_DIR /usr/local/Cellar/curl/7.75.0/include/) find_package(curl REQUIRED) message(STATUS ">>> CURL Dir Found:

问题是:如何让CMAKE设置/使CURL\u INCLUDE\u DIR为“/usr/local/cillar/CURL/7.75.0/INCLUDE/”

不管我做什么,CMAKE只会找到Xcode库的版本/位置

我的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代码都会导致

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

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

我已经求助于添加

设置(CMAKE_CXX_标志”-I/usr/local/cillar/curl/7.57.0/include -L/usr/local/Cell/curl/7.57.0/lib”)


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

CMAKE
FindCURL
模块(至少在我的3.5.1版本中)在任何地方都没有引用
CURL\u ROOT\u DIR
,所以我不相信设置该变量会有任何效果

事实上,
FindCURL
模块实际上非常基本,没有提供任何自定义查找位置的方法,这意味着它只能在“标准”路径中查找(例如
/usr/lib
/usr/local/lib
等)

但是,您可以使用which,它接受
路径
参数

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\u CURL}
创建一个
导入的
库目标,并在该目标上设置
接口_INCLUDE\u目录
,以便使用者自动获得包含路径集

add_library(
        libcurl 
        IMPORTED)

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

set_target_properties(
        libcurl 
        PROPERTIES
            INTERFACE_INCLUDE_DIRECTORIES "${CURL_PATH}/include")
现在你可以直接链接到target
libcurl
,你的应用程序将自动更新其包含路径

add_executable(
        foo 
        main.cpp)

target_link_libraries(
        foo
        libcurl)