CMake与动态链接库(dll, so, dylib)

本文介绍如何使用CMake构建一个跨平台的工程,涉及Windows、Linux和macOS上的动态链接库设置,包括SDK下载、CMake安装、工程结构、CMakeLists.txt配置、动态库路径设置、dll拷贝、安装路径调整和RPATH设定。
摘要由CSDN通过智能技术生成

使用CMake可以很方便的实现跨平台编译。如果要Link一个第三方库,需要针对平台进行设置。这里分享下如何创建一个简单的CMake工程实现Windows, Linux和macOS上的自动编译。

SDK下载

CMake下载安装

Windows

Linux

sudo apt-get install cmake

macOS

brew install cmake

注意不要在brew前面加sudo。最新的brew不再支持,用了会发生错误:

Error: Running Homebrew as root is extremely dangerous and no longer supported.
As Homebrew does not drop privileges on installation you would be giving all
build scripts full access to your system.

工程结构

project
    |-- platforms
        |-- win
            |-- DBRx86.lib
            |-- DynamsoftBarcodeReaderx86.dll
        |-- linux
            |-- libDynamsoftBarcodeReader.so
        |-- macos
            |-- libDynamsoftBarcodeReader.dylib
    |-- include
        |
### 回答1: 在CMake中使用动态链接库,需要使用以下几个命令: 1. `find_package()` 命令:用于查找需要链接的动态库。 2. `target_link_libraries()` 命令:用于将需要链接的动态库添加到目标可执行文件中。 下面是一个示例 CMakeLists.txt 文件,其中包含了以上两个命令: ``` cmake_minimum_required(VERSION 3.0) project(my_project) # 查找需要链接的动态库 find_package(MyLib REQUIRED) # 添加可执行文件 add_executable(my_executable main.cpp) # 将需要链接的动态库添加到可执行文件中 target_link_libraries(my_executable MyLib::MyLib) ``` 在这个示例中,CMake 使用 `find_package()` 命令查找名为 `MyLib` 的动态库,并将其添加到 `my_executable` 可执行文件中。注意,`target_link_libraries()` 命令中使用了 `MyLib::MyLib`,这是因为 CMake 会自动为 `MyLib` 库生成一个别名。 另外,需要在 `CMakeLists.txt` 文件中指定 `MyLib_DIR` 变量的值,以告诉 CMake 库的位置。可以通过以下命令来指定: ``` set(MyLib_DIR /path/to/MyLib) ``` 在这个命令中,将 `/path/to/MyLib` 替换为实际的库文件路径。 ### 回答2: CMake是一个跨平台的构建工具,可以帮助开发人员构建、测试和打包软件项目。在CMake中,使用动态链接库是非常常见的。 动态链接库也称为共享库,它是在运行时被加载到内存中并被多个程序共享的代码和数据。相比于静态链接库,动态链接库能够使得程序的体积更小,同时也提供了模块化的扩展性。 使用CMake处理动态链接库需要以下几个步骤: 1. 创建动态链接库项目:首先,在CMakeLists.txt文件中使用add_library命令创建动态链接库项目,指定项目的名称和源代码文件。 2. 设置库的类型:通过在add_library命令中添加关键字SHARED,指示CMake创建一个动态链接库。例如,add_library(mylib SHARED mylib.cpp)。 3. 指定链接的其他库:如果动态链接库依赖于其他的库,可以使用target_link_libraries命令指定这些依赖。例如,target_link_libraries(mylib otherlib)。 4. 安装库:通过在CMakeLists.txt文件中添加install命令,将动态链接库安装到指定位置。例如,install(TARGETS mylib LIBRARY DESTINATION lib)。 使用CMake构建并使用动态链接库时,我们需要在应用程序的CMakeLists.txt文件中定义用于目标链接的库,并使用target_link_libraries命令添加需要链接的动态链接库。然后在应用程序源代码文件中通过include_directories命令指定头文件路径,并使用库中的函数和数据。 总之,CMake提供了方便的方式来处理动态链接库,通过合理使用动态链接库,我们可以更好地组织和管理代码,提高程序的可维护性和扩展性。使用CMake动态链接库功能,我们能够简化构建过程并提高开发效率。 ### 回答3: CMake是一个开源的跨平台的构建工具,它可以用来自动生成与平台相关的构建文件,包括Makefile和Visual Studio项目文件等。使用CMake,我们可以方便地管理和构建项目。 在CMake中使用动态链接库有两个主要步骤: 1. 定义动态链接库: 首先,我们需要定义我们的动态链接库。在CMakeLists.txt文件中,我们可以使用add_library命令来定义动态链接库。例如,以下命令可以创建一个名为mylib的动态链接库: add_library(mylib SHARED src1.cpp src2.cpp) 这里的src1.cpp和src2.cpp是包含所需功能的源文件。 2. 使用动态链接库: 一旦我们定义了动态链接库,我们就可以在其他目标或可执行文件中使用它。我们可以使用target_link_libraries命令将动态链接库与目标文件关联起来。例如,以下命令将名为myapp的可执行文件与mylib动态链接库关联: add_executable(myapp main.cpp) target_link_libraries(myapp mylib) 在这里,main.cpp是我们的主程序源文件。 通过这两个步骤,我们成功地将动态链接库与目标文件关联起来,并且在构建中使用动态链接库。当我们构建项目时,CMake会自动处理动态链接库的依赖关系和连接过程。 总的来说,使用CMake可以轻松地管理动态链接库,并将其与我们的项目或可执行文件一起构建。这样,我们可以更加灵活和高效地开发和维护我们的项目。 注意:在以上的示例中,我们假设mylib的源文件和myapp的源文件在同一个目录下。如果不是这种情况,我们需要修改add_library和target_link_libraries命令中的路径。
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值