C++ 如何使用CMake指定在何处查找共享库?
我正在尝试使用CMake链接到共享库。我知道这可以通过使用target_link_libraries()命令来实现。我已经能够让这个工作,但不是完全在我想要的方式 使用下面的CMakeLists.txt,我已经能够链接到共享库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_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时需要存在库文件。