CMake配置工程链接库

本文介绍了在CMake中链接C/C++库的三种方法:find_package、find_path & find_library以及FindPkgConfig。find_package是CMake内置的库查找命令,find_path和find_library用于查找头文件和库文件,而FindPkgConfig则是利用pkg-config工具来定位库。每种方法都有其适用场景和使用细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CMake是一款优秀的C/C++项目构建工具。而C/C++项目经常使用一些第三方库,如boost、luajit等。而在CMake下大致有3种方式将C/C++库引入工程。

find_package

find_package是CMake原生使用的库查找命令。使用方式如下

find_package(Boost REQUIRED)
find_package(SDL2 REQUIRED)
if(Boost_FOUND) #这些变量的名称没有标准,去CMakeCache.txt里看产生什么变量。
 message(STATUS "found boost")
endif()
include_directories(${Boost_INCLUDE_DIRS}) #这个类型变量肯定会有,头文件目录
target_link_libraries(CruleEngine "${SDL2_IMAGE_LIBRARY}") #这是库的位置 ​

这个查找主要是在unix下起作用,在windows下几乎没用。它是其实

### 如何使用 CMake 创建动态链接库 创建动态链接库的过程可以通过配置 `CMakeLists.txt` 文件实现。以下是关于如何通过 CMake 生成动态链接库的关键步骤及其解释。 #### 配置 CMakeLists.txt 的基本结构 为了生成动态链接库,需要在 `CMakeLists.txt` 中定义项目的基本信息以及指定目标类型为 `SHARED`。以下是一个典型的例子: ```cmake cmake_minimum_required(VERSION 2.6) # 指定所需的最低 CMake 版本[^4] project(example_project) # 定义项目的名称 # 添加头文件目录以便编译器能够找到头文件 include_directories(include) # 设置包含路径 # 收集源文件到变量中 aux_source_directory(src SRC_LIST) # 自动收集 src 目录下的所有源文件 # 声明要生成的动态链接库 add_library(my_dynamic_lib SHARED ${SRC_LIST}) # 使用 SHARED 关键字声明动态[^3][^5] # 如果存在依赖项,则需将其链接至当前 target_link_libraries(my_dynamic_lib dependency1 dependency2) # 连接其他依赖[^2] ``` 上述代码片段展示了如何通过 CMake 来生成一个名为 `my_dynamic_lib` 的动态链接库,并指定了其所需依赖关系。 #### 动态类型的说明 当使用 `add_library` 函数时,必须明确指出所创建的目标是何种类型的。对于动态链接库而言,应选用关键字 `SHARED`。此外还有两种常见选项: - **STATIC**: 表示静态。 - **MODULE**: 类似于动态但在某些平台上不支持 dyld 加载机制的情况下会被视为共享处理[^5]。 #### 输出路径设定 如果希望自定义生成后的动态链接库存储位置,可以在脚本里加入如下命令行语句来调整默认行为: ```cmake set(LIBRARY_OUTPUT_PATH /desired/path/to/output/libs/) # 设定最终产物存放地址 ``` 此操作允许开发者灵活控制构建成果的具体落地点,从而便于后续集成测试或部署流程管理。 #### 总结 综上所述,借助 CMake 工具链完成动态链接库制作主要涉及以下几个方面的工作:确定合适的最小兼容版本号;命名整个工程项目;引入必要的开发资源(比如 .h 头档);搜集实际参与编译过程中的 c/cpp 实现单元集合起来作为输入素材交给 add_library 方法调用——记得标注成 SHARE 形式哦!最后别忘了考虑可能存在的第三方关联模块也要一并纳入进来形成完整的依赖链条才行[^1]-。 ```python print("Dynamic library created successfully!") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值