cmake - 如何指定 target_link_libraries 使用的库的 cmake 路径
问题描述
我有一些具有cmake
构建系统的代码库。在构建 iam 时出现如下错误
/usr/bin/ld: cannot find -lcurl
下面是示例cmakelist.txt
cmake_minimum_required(VERSION 2.8.6)
project(oci_object_test)
set(IB_HOME /home/user/sample_cmake/usr/lib)
include_directories(${LIB_HOME}/include)
link_directories(${LIB_HOME}/lib64)
link_directories(/home/user/sample_cmake/usr/lib/lib64)
link_directories(/home/user/)
set(SOURCES
sample.cpp
)
add_executable(demo ${SOURCES})
target_link_libraries(demo curl openssl)
以上cmakelist.txt
是link.txt
cmake生成的
/usr/bin/c++ CMakeFiles/demo.dir/sample.cpp.o -o demo -L/home/user/sample_cmake/usr/lib/lib64 -L/home/user -rdynamic -lcurl -lopenssl -Wl,-rpath,/home/user/sample_cmake/usr/lib/lib64:/home/user
-lcurl
这个问题是由于link.txt
cmake 生成的。如果我手动删除并构建-lcurl
,link.txt
构建将成功,没有链接器错误。那么有什么办法可以摆脱它-lcurl
,link.txt
或者是否可以定义 -lcurl 路径,它实际存在 libcurl(例如假设 libcurl 存在于内部/usr/curl_path/curl
),以便 cmake 可以生成如下所示的 link.txt?
/usr/bin/c++ CMakeFiles/demo.dir/sample.cpp.o -o demo -L/home/user/sample_cmake/usr/lib/lib64 -L/home/user -rdynamic /usr/curl_path/curl -lopenssl -Wl,-rpath,/home/user/sample_cmake/usr/lib/lib64:/home/user
我知道我可以libucrl
直接如下定义路径,这将解决我的问题,
target_link_libraries(demo /usr/curl_path/curl openssl)
但是我正在寻找我可以在 toolchain.cmake 文件中定义的类似SET
或任何其他cmake environment variable
内容,以便cmakelist.txt
保持不变,in simple words how do i specify those libraries's path to cmake which are going use inside target_link_libraries
解决方案
如果您的 CMake 版本低于 3.12,则需要使用这种旧方法。见: https ://cmake.org/cmake/help/v3.10/module/FindCURL.html
cmake_minimum_required(VERSION 3.10)
project(program)
find_package(CURL REQUIRED)
if (CURL_FOUND)
add_executable(program main.cpp)
target_link_libraries(program ${CURL_LIBRARIES})
target_include_directories(program PRIVATE ${CURL_INCLUDE_DIRS})
endif()
CMake 3.12 及更高版本有一种使用导入目标的新方法。请参阅新的替代方法FindCurl。
cmake_minimum_required(VERSION 3.12)
project(program)
find_package(CURL REQUIRED)
if (CURL_FOUND)
add_executable(program main.cpp)
target_link_libraries(program CURL::libcurl)
endif()
推荐阅读
- python - docplex中的敏感性分析
- reactjs - 材质 UI 中的 findDOMNode 控制台警告
- ios - 如何在 swift 中使用 TableView 对查询进行分页
- ruby-on-rails - Rails 模型 #attributes 方法将 gem 插入关联显示为模型属性
- c# - ICollectionView 多重过滤器
- matlab - Matlab `xcorr(x,y)` 用于两个以上的输入
- python - 从数字Python之前的字符串中提取单词
- html - 如何管理引导 Mansory col 高度?
- javascript - 如何在 ReactJS 中使用状态更新数组
- c# - C#中如何更改计算机的域