CMake构建动态与静态库
需积分: 5 18 浏览量
更新于2024-08-05
收藏 812B TXT 举报
"CMakeLists.txt 是用于管理项目构建过程的配置文件,它是CMake构建系统的入口。通过编写CMakeLists.txt,你可以指定项目的编译器、编译选项、依赖库等,使得项目能在多种平台上进行跨平台构建。"
在给定的CMakeLists.txt文件中,可以看到以下关键知识点:
1. **cmake_minimum_required**: 这行命令定义了项目所需的CMake版本,这里是3.5,`FATAL_ERROR`参数意味着如果使用的CMake版本低于指定版本,构建过程将终止。这确保了项目能在支持的CMake版本上正确构建。
2. **project**: `project(hardinfo)`创建了一个名为"hardinfo"的项目,并指定了项目语言(默认为C/C++)。这一步会设置一些全局变量,如项目名称和源代码的默认编译语言。
3. **add_library**: `add_library`命令用于创建库。在这里,有三种类型的库被创建:
- `message-objs`: 使用`OBJECT`标志创建了一个对象库,它包含了编译但未链接的对象文件(myDll.cpp和myDll.h)。对象库主要用在多库共享源码的情况下,减少重复编译。
- `message-shared`: 创建了一个共享库(动态库),它的内容是`message-objs`目标的对象文件。`SHARED`标志表明这是一个动态链接库。`set_target_properties`设置了库的输出名称为"libhardinfo"。
- `message-static`: 创建了一个静态库(静态库),同样基于`message-objs`的目标对象文件。同样设置了输出名称为"libhardinfo"。
4. **set_target_properties**: 这个命令用于设置目标(库或可执行文件)的特定属性。在这里,`POSITION_INDEPENDENT_CODE`被设置为1,这意味着库的代码是位置无关的,这对于生成共享库是必要的。
5. **$<TARGET_OBJECTS:message-objs>`: 这是CMake的Generator Expression,用于引用`message-objs`目标的所有对象文件,方便在多个库之间共享编译结果。
6. **add_executable**: 虽然在给定的示例中没有实际使用,`add_executable`用于创建一个可执行文件。这里注释掉了`add_executable(hello-world hello-world.cpp)`,说明原本的计划是创建一个名为"hello-world"的可执行程序,其源代码是hello-world.cpp。
7. **target_link_libraries**: 这行代码注释掉了`target_link_libraries(hello-world message-static)`,表示原本打算将静态库`message-static`链接到可执行文件`hello-world`。在实际项目中,你需要取消注释并链接所需的库。
通过这个CMakeLists.txt,我们可以了解到CMake如何管理和构建项目,包括创建不同类型的库,设置库的属性,以及链接这些库到可执行文件。这样的配置文件使得项目能够灵活地适应不同的构建需求和平台。
2023-04-14 上传
2020-07-12 上传
142 浏览量
2023-04-03 上传
2024-09-06 上传
2023-05-05 上传
2024-01-18 上传
2023-12-03 上传
2023-08-24 上传
a563476223
- 粉丝: 0
- 资源: 5
最新资源
- 开源通讯录备份系统项目,易于复刻与扩展
- 探索NX二次开发:UF_DRF_ask_id_symbol_geometry函数详解
- Vuex使用教程:详细资料包解析与实践
- 汉印A300蓝牙打印机安卓App开发教程与资源
- kkFileView 4.4.0-beta版:Windows下的解压缩文件预览器
- ChatGPT对战Bard:一场AI的深度测评与比较
- 稳定版MySQL连接Java的驱动包MySQL Connector/J 5.1.38发布
- Zabbix监控系统离线安装包下载指南
- JavaScript Promise代码解析与应用
- 基于JAVA和SQL的离散数学题库管理系统开发与应用
- 竞赛项目申报系统:SpringBoot与Vue.js结合毕业设计
- JAVA+SQL打造离散数学题库管理系统:源代码与文档全览
- C#代码实现装箱与转换的详细解析
- 利用ChatGPT深入了解行业的快速方法论
- C语言链表操作实战解析与代码示例
- 大学生选修选课系统设计与实现:源码及数据库架构