问题是:如何让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版本/位置。有没有更好的方法,我没有弄清楚?
答案 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)