【发布时间】: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