如何指定库';目标链接库使用的cmake的路径
我有一些代码库,它有如何指定库';目标链接库使用的cmake的路径,cmake,linker,libcurl,ld,Cmake,Linker,Libcurl,Ld,我有一些代码库,它有cmake构建系统 /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
cmake
构建系统
/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
,下面是由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 -lcurl -lopenssl -Wl,-rpath,/home/user/sample_cmake/usr/lib/lib64:/home/user
此问题是由于cmake生成的link.txt
中添加了-lcurl
。如果我手动从link.txt
中删除-lcurl
,并进行构建,则构建将获得成功,而不会出现链接器错误。那么,我有没有办法在link.txt
中去掉这个-lcurl
,或者可以在实际libcurl出现的地方定义-lcurl路径(例如假设libcurl出现在/usr/curl\u 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)
但我正在寻找类似于
SET
或任何其他cmake环境变量
的东西,我可以在toolchain.cmake文件中定义这些变量,以便cmakelist.txt
不被触及,简单地说,我如何指定那些将在target\u link\u库中使用的库的cmake路径
如果您的cmake版本低于3.12,则需要使用此旧方法。见:
add_library( curl SHARED IMPORTED)
set_property(TARGET curl PROPERTY IMPORTED_LOCATION "${CURL_LIBRARY}")
CMake 3.12及更高版本有一种使用导入目标的新方法。看看新的选择
我发现这个问题可以通过两种方法来解决(第一种方法类似于) 第二种方法是在调用
target\u link\u目录之前,将下面两行代码添加到cmakelist.txt
文件中
add_library( curl SHARED IMPORTED)
set_property(TARGET curl PROPERTY IMPORTED_LOCATION "${CURL_LIBRARY}")
其中CURL\u LIBRARY
是libcurl.so
在toolchain.cmake
不幸的是,我没有找到任何解决方案来解决这个问题,而没有触及cmakelist.txt
您必须查看CMakeLists.txt文件,以查看curl库链接的位置。在CMake文件中查找link\u libraries()
或target\u link\u libraries()
命令,这些命令可能包含curl
或-lcurl
。如果没有看到CMake文件本身,很难提出任何明确的建议…@squareskittles我添加了示例cmakelist.txt和问题的完整描述请查看itCMake不会自动将libcurl(或任何其他库)链接到您的程序。您在CMakeLists.txt中的某个地方请求链接此库。简言之:@squareskittles是正确的。您可以显示完整的cmake脚本,也可以自己查找。如何指定目标链接库使用的库到cmake的路径?
add_library( curl SHARED IMPORTED)
set_property(TARGET curl PROPERTY IMPORTED_LOCATION "${CURL_LIBRARY}")