CMake构建动态与静态库
需积分: 5 181 浏览量
更新于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-03-09 上传
2024-09-06 上传
2023-08-24 上传
2024-01-18 上传
2023-06-06 上传
2023-07-27 上传
a563476223
- 粉丝: 0
- 资源: 5
最新资源
- android-saddler-sample:Android自动审核示例
- 自定义字体宽、高比例-易语言
- 长沙各乡镇街道shp文件 最新版
- Counter-Redux:计数器应用程序,将Redux的实现作为React应用程序的状态管理
- iAMart-hugo:iAMart网站的代码和内容存储库
- 易语言标签打印编辑器源码-易语言
- Spring-Hibernate-Banking-System-console-based-app
- wooting-double-movement:一键式安装可在Fortnite中实现双重移动
- 数据-行业数据-智能手机市场份额_全球_小米.rar
- w5-caseStudy
- 一款精美日历小程序.zip
- SoftwareEvolutionAnalysis:此 repo 是维多利亚大学 SENG 371 软件演化分析项目的项目数据和源代码的地方
- react-native-linking-android:React Native Linking android为您提供了一个通用界面,可与传出的应用程序链接进行交互
- YOTSUBA
- 试用版30天的小程序.rar
- jenkins