linux – 强制CMake使用完整的库路径

linux – 强制CMake使用完整的库路径,第1张

概述我有以下问题.我的 Linux机器上有一个单独的{bin,lib,include}树,其中安装了CMake和我开发工作所需的所有库.但只有PATH环境变量设置为此bin目录,并且由于某些原因我无法设置LD_LIBRARY_PATH.此树中的所有程序都是使用RPATH构建的.我正在使用的CMake 3.3.1也在这棵树里面. 现在问题我想使用libcurl编译程序并设置以下CMakeLists.tx 我有以下问题.我的 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使用它在执行链接时找到的库?

解决方法 把我的评论转化为答案

我能够重现你的问题 – 即使没有完全相同的环境 – 并找到了两个可能的解决方案:

>您将策略CMP0060设置为NEW

cmake_policy(SET CMP0060 NEW)

The NEW behavior for this policy is to link librarIEs by full path even if they are in implicit link directorIEs.

>您可以创建一个中间导入的库并使用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的设置,因为其中列出的路径被视为“隐式”搜索路径,相应地替换了完整的库路径(请参阅cmComputeLinkInformation::CheckImplicitDirItem()UnixPaths.cmake)

message("CMAKE_PLATFORM_IMPliCIT_link_DIRECTORIES: ${CMAKE_PLATFORM_IMPliCIT_link_DIRECTORIES}")
总结

以上是内存溢出为你收集整理的linux – 强制CMake使用完整的库路径全部内容,希望文章能够帮你解决linux – 强制CMake使用完整的库路径所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/1027376.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存