【问题标题】:How to specify where to find a shared library using CMake? [duplicate]如何使用 CMake 指定在哪里找到共享库? [复制]
【发布时间】:2018-02-05 08:22:08
【问题描述】:

我正在尝试使用 CMake 链接到共享库。我知道这可以使用 target_link_libraries() 命令来实现。我已经能够完成这项工作,但并不完全按照我想要的方式。

使用下面的 CMakeLists.txt,我已经能够链接到共享库。

cmake_minimum_required(VERSION 3.7)
project(DylibTest)

set(CMAKE_CXX_STANDARD 11)

set(SOURCE_FILES main.cpp)
add_executable(DylibTest ${SOURCE_FILES})

target_link_libraries(DylibTest 
${CMAKE_SOURCE_DIR}/Resources/libDynamicTest.dylib)

这似乎告诉链接器在项目所在的目录中查找。这对开发来说很好,但是我将如何分发这个项目?最终用户显然不会拥有相同的文件夹。

我尝试过像这样传递相对路径:

cmake_minimum_required(VERSION 3.7)
project(DylibTest)

set(CMAKE_CXX_STANDARD 11)

set(SOURCE_FILES main.cpp)
add_executable(DylibTest ${SOURCE_FILES})

target_link_libraries(DylibTest /Resources/libDynamicTest.dylib)

执行此操作时,我收到以下错误:

No rule to make target `/Resources/libDynamicTest.dylib', needed by `DylibTest'.  Stop.

我查看了 target_link_directories() 的文档,但没有帮助。我还在这里查看了许多其他问题。

如果不清楚,我的意图是将可执行文件与一个名为“Resources”的文件夹一起分发,该文件夹包含共享库。为了执行此操作,我的 CMakeLists.txt 文件应如何显示?

编辑:针对这个问题被标记为可能与this question 重复,我承认这个问题基本上是在问同样的事情,那里的答案对我不起作用。

这是我的 CMakeLists.txt 在尝试接受另一个问题的答案后的样子:

cmake_minimum_required(VERSION 3.7)
project(DylibTest)

set(CMAKE_CXX_STANDARD 11)

set(SOURCE_FILES main.cpp)
add_executable(DylibTest ${SOURCE_FILES})

link_directories(${CMAKE_BINARY_DIR}/Resources)
target_link_libraries(DylibTest DynamicTest)

很遗憾,这不起作用,会导致错误提示找不到库。

【问题讨论】:

    标签: c++ cmake shared-libraries clion


    【解决方案1】:

    看看https://cmake.org/cmake/help/v3.0/command/find_library.html

    您可以为 cmake 指定一个或多个替代搜索文件夹来查找库。它还会在您的操作系统的默认库文件夹中查找。

    find_library(YOURLIB 
          NAMES your // without the lib 
          PATHS ${CUSTOM_LIB_PATH})
    

    然后您可以将库链接到

    target_link_library(targetname ${YOURLIB})
    

    【讨论】:

    • 这个。 find_library 还会为您添加 .dylib 后缀,使您的构建更便携。除了 CMake 变量之外,您还可以使用环境变量作为库位置的提示,这非常方便,特别是当机器上的多个项目必须使用同一个库时。请注意,如果库正在构建为与依赖可执行文件相同的构建的一部分,则此方法不起作用,因为运行 CMake 时需要存在库文件。
    【解决方案2】:

    您可能正在寻找Creating packages with CPack?这让您可以描述如何将您的项目打包到安装例程中,以及安装后的文件布局是什么样的。

    【讨论】:

      猜你喜欢
      • 2015-10-03
      • 1970-01-01
      • 2012-09-30
      • 2013-07-04
      • 2016-11-03
      • 1970-01-01
      • 2015-06-09
      • 2020-06-07
      • 1970-01-01
      相关资源
      最近更新 更多