linux – 强制CMake使用完整的库路径
我有以下问题.我的
Linux机器上有一个单独的{bin,lib,include}树,其中安装了CMake和我开发工作所需的所有库.但只有PATH环境变量设置为此bin目录,并且由于某些原因我无法设置LD_LIBRARY_PATH.此树中的所有程序都是使用RPATH构建的.我正在使用的CMake 3.3.1也在这棵树里面.
现在问题我想使用libcurl编译程序并设置以下CMakeLists.txt PROJECT(EXAMPLE) CMAKE_MINIMUM_REQUIRED(VERSION 2.8) SET(CMAKE_SKIP_BUILD_RPATH FALSE) FIND_PACKAGE(CURL REQUIRED) FIND_PACKAGE(OpenSSL REQUIRED) INCLUDE_DIRECTORIES(${CURL_INCLUDE_DIR} ${OPENSSL_INCLUDE_DIR}) SET(LIBS ${CURL_LIBRARIES} ${OPENSSL_LIBRARIES}) ADD_EXECUTABLE(curl_ex src/curl_ex.c) TARGET_LINK_LIBRARIES(curl_ex ${LIBS}) 当我现在运行CMake时,由于它与CMake位于相同的前缀内,因此找到了我的个人软件树中的curl和OpenSSL设置. 但是当我使用make VERBOSE = 1构建项目时,我看到以下链接命令: gcc CMakeFiles/curl_ex.dir/src/curl_ex.c.o -o curl_ex -rdynamic -lcurl -lssl -lcrypto 构建可执行文件是指系统范围内安装的curl和openssl库,而不是配置期间找到的一个cmake. 如何强制CMake使用它在执行链接时找到的库? 解决方法
把我的评论转化为答案
我能够重现你的问题 – 即使没有完全相同的环境 – 并找到了两个可能的解决方案: >您将策略 cmake_policy(SET CMP0060 NEW)
>您可以创建一个中间导入的库并使用IMPORTED_LOCATION(参见[CMake] TARGET_LINK_LIBRARIES with full path libraries) add_library(curl UNKNOWN IMPORTED) set_property(TARGET curl PROPERTY IMPORTED_LOCATION "${CURL_LIBRARIES}") target_link_libraries(curl_ex curl) 这对我有用,但根据CMake imported library behaviour,您可能还需要设置IMPORTED_IMPLIB. 背景 请检查CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES的设置,因为其中列出的路径被视为“隐式”搜索路径,相应地替换了完整的库路径(请参阅 message("CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES: ${CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES}") (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |