Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用CMake指定在何处查找共享库?_C++_Cmake_Shared Libraries_Clion - Fatal编程技术网

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

C++ 如何使用CMake指定在何处查找共享库?,c++,cmake,shared-libraries,clion,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

我正在尝试使用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文件应该是什么样子

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

下面是我的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)
不幸的是,这不起作用,会导致一个错误,说明找不到库。

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

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

看一看

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

find_library(YOURLIB 
      NAMES your // without the lib 
      PATHS ${CUSTOM_LIB_PATH})
然后可以将库链接到

target_link_library(targetname ${YOURLIB})
看一看

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

find_library(YOURLIB 
      NAMES your // without the lib 
      PATHS ${CUSTOM_LIB_PATH})
然后可以将库链接到

target_link_library(targetname ${YOURLIB})

这个
find_library
还将为您添加
.dylib
后缀,使您的构建更具可移植性。除了CMake变量,您还可以使用环境变量作为库位置的提示,这非常方便,特别是当同一个库必须由计算机上的多个项目使用时。但是请注意,如果库是作为与依赖的可执行文件相同的构建的一部分构建的,则此方法不起作用,因为在运行CMake.this时需要存在库文件
find_library
还将为您添加
.dylib
后缀,使您的构建更具可移植性。除了CMake变量,您还可以使用环境变量作为库位置的提示,这非常方便,特别是当同一个库必须由计算机上的多个项目使用时。但是请注意,如果库是作为与依赖的可执行文件相同的构建的一部分构建的,则此方法不起作用,因为在运行CMake时需要存在库文件。