如何使用CMake指定在何处查找共享库?

时间:2017-08-28 06:09:20

标签: c++ cmake shared-libraries clion

我正在尝试使用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)

遗憾的是,这不会导致错误,导致无法找到库。

2 个答案:

答案 0 :(得分:3)

查看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})

答案 1 :(得分:0)

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