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

How to make CMAKE find specific version of lib curl on OSX?

本文关键字:版本 lib curl CMAKE OSX      更新时间:2023-10-16

>问题是:如何让 CMAKE 设置/使CURL_INCLUDE_DIR设置为"/usr/local/Cellar/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 代码都会导致"CURL_INCLUDE_DIR"

"/Applications/Xcode.app/Content/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 实际使用我想要的库版本/位置。有没有更好的方法,我无法弄清楚?

cmakeFindCURL模块(至少在我拥有的版本中,3.5.1)在任何地方都没有引用CURL_ROOT_DIR,所以我认为设置该变量不会有任何影响。

实际上,FindCURL模块确实非常基本,并且不提供任何自定义查找位置的方法,这意味着它将仅在"标准"路径中查找(例如/usr/lib/usr/local/lib等)

但是,您可以使用find_library,它需要一个PATHS参数。

set(CURL_PATH "/usr/local/Cellar/curl/7.75.0")
find_library(
LIB_CURL
NAMES
curl
PATHS 
${CURL_PATH}/lib)

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

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

然后,您可以直接链接到${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)