CMake实战(二)

简介: 上一篇《CMake实战(一)》我们是把所有文件放在同一个目录下,而平常开发时,我们会将源文件进行分类,放到不同的目录下。接下来我们来看一下具体要怎么操作。

前言

上一篇《CMake实战(一)》我们是把所有文件放在同一个目录下,而平常开发时,我们会将源文件进行分类,放到不同的目录下。接下来我们来看一下具体要怎么操作。

使用实例

(1)文件内容同上一篇,目录结构如下:

./test2|+---main.c|+---hello/|+---hello.c|+---hello.h

20210207153850832.png

(2) hello目录下创建CMakeLists.txt, 内容如下:

aux_source_directory(. DIR_LIB_SRCS)
# 生成链接库add_library (hello${DIR_LIB_SRCS})

(3) 根目录下创建CMakeLists.txt, 内容如下:

#cmake最低版本需求,不加入此行会受到警告信息CMAKE_MINIMUM_REQUIRED(VERSION2.6)
PROJECT(HELLO) #项目名称#把当前目录(.)下所有源代码文件加入变量SRC_LISTAUX_SOURCE_DIRECTORY(. SRC_LIST)
# 添加 hello子目录ADD_SUBDIRECTORY(hello)
# 设置头文件查找目录INCLUDE_DIRECTORIES(./hello)
#生成应用程序 mainADD_EXECUTABLE(main${SRC_LIST})
# 添加链接库, hello即子目录编译的库TARGET_LINK_LIBRARIES(mainhello)

(3) 创建build目录

mkdirbuild

目录结构如下:

2021020715410185.png

(4) 使用cmake构建项目

cdbuildcmake ..     // ..表示上一个目录

2021020715413426.png

(5) 编译生成可执行文件

make

20210207154215695.png

so easy!


总结

上面是将子目录编译成库,然后进行链接!这只是一种方式,我们也可以直接在根目录的CMakeLists.txt中指定子目录的源文件!大家可以根据个人喜好来决定!


官方文档:

https://cmake.org/cmake/help/v3.19/manual/cmake-commands.7.html


相关文章
|
存储 监控 关系型数据库
ceph简介及高可用集群搭建
ceph简介及高可用集群搭建
|
存储 弹性计算 运维
运维攻城狮的日子:解读运维职业的使命与挑战
从IT诞生之初,运维作为一项关键角色就开始扮演着重要的角色。而7月24日这一天,被定为了专属于运维攻城狮的日子,它涵盖了运维职业的使命和职业素养,展示了运维人的生存状态。在这个特殊的日子里,阿里云存储团队、阿里云弹性计算团队、阿里云开发者关系团队以及CSDN联合举办了一场面向运维人的技术沙龙,旨在为运维人员提供更多的学习和交流机会。关于本次沙龙,有很多干货,也有很多值得学习的地方,那么接下来就来简单聊一下。
385 1
运维攻城狮的日子:解读运维职业的使命与挑战
|
消息中间件 安全 Kafka
"深入实践Kafka多线程Consumer:案例分析、实现方式、优缺点及高效数据处理策略"
【8月更文挑战第10天】Apache Kafka是一款高性能的分布式流处理平台,以高吞吐量和可扩展性著称。为提升数据处理效率,常采用多线程消费Kafka数据。本文通过电商订单系统的案例,探讨了多线程Consumer的实现方法及其利弊,并提供示例代码。案例展示了如何通过并行处理加快订单数据的处理速度,确保数据正确性和顺序性的同时最大化资源利用。多线程Consumer有两种主要模式:每线程一个实例和单实例多worker线程。前者简单易行但资源消耗较大;后者虽能解耦消息获取与处理,却增加了系统复杂度。通过合理设计,多线程Consumer能够有效支持高并发数据处理需求。
459 4
|
Linux
CentOS 硬盘扩容
CentOS 硬盘扩容
375 0
|
负载均衡 关系型数据库 MySQL
MySQL 主主复制与主从复制对比
MySQL的主主复制和主从复制是两种常见的数据库复制配置方式,各有优缺点和适用场景。以下是对这两种复制方式的详细对比: ### 主从复制 (Master-Slave Replication) **特点:** 1. **单向复制**:数据从主服务器复制到一个或多个从服务器。从服务器只能从主服务器接收数据更新,不能向主服务器发送数据。 2. **读写分离**:主服务器处理写操作(INSERT、UPDATE、DELETE),从服务器处理读操作(SELECT),可以分担读负载,提高系统的整体性能。 3. **数据一致性**:数据在主服务器上是最新的,从服务器上可能会有一定的延迟。 **优点:**
924 1
|
分布式计算 DataWorks 大数据
MaxCompute产品使用问题之整库实时需要申请什么东西
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
110 8
|
网络协议 Ubuntu Linux
iPad Pro “买后生产力” - 在iPad上远程连接服务器编程写代码【公网远程】
iPad Pro “买后生产力” - 在iPad上远程连接服务器编程写代码【公网远程】
952 1
|
人工智能 运维 Prometheus
现代运维中的自动化工具与挑战
随着信息技术的不断发展,现代运维工作日益复杂且关键。本文将探讨现代运维中自动化工具的应用与挑战,介绍各类自动化工具在提高效率、降低风险方面的作用,并讨论在实际应用中可能面临的问题与解决方法。
183 4
|
机器学习/深度学习 算法 TensorFlow
TensorFlow 2 和 Keras 高级深度学习:6~10(2)
TensorFlow 2 和 Keras 高级深度学习:6~10(2)
150 0
|
JSON 数据格式 C++
精心整理了100+Python字符串常用操作,收藏备用!
精心整理了100+Python字符串常用操作,收藏备用!
233 0