上篇文章(linux中cmake的使用1-单个源文件)介绍了编写cmakelists.txt的最基础用法——只有一个源文件的情况。
本篇继续介绍,在同一目录下有多个源文件时如何编写cmakelists.txt。
1 一组文件的情况 先来看下面这种情况:除了main.c以外,只多出来一组源文件(1个.c文件+1个.h文件)。
1.1 编写c源文件 以一个简单的两数相加为例,代码如下:
main.c
#include #include sum.hint main(void){ int a = 1; int b = 2; printf(a=%d, b=%d\n, a, b); printf(a+b=%d\n, sum(a, b)); return 0;} sum.c
#include sum.hint sum(int a, int b){ return (a + b);} sum.h
#ifndef _sum_h_#define _sum_h_int sum(int a, int b);#endif 1.2 编写cmakelists.txt cmakelists.txt的内容,和上一篇介绍的对单个文件进行编译的情况基本一样:
cmake_minimum_required (version 2.8)project (sum_test)add_executable(sum_test main.c sum.c) 注意,同个目录有多个源文件,cmakelists的主要区别是在add_executable继续增加需要编译的c文件。
1.3 编译测试 在当前目录执行cmake指令:
cmake . cmake后面的点,用来告诉cmake工具在当前目录中搜寻cmakelists.txt文件。
自动生成makefile文件之后,再使用make指令编译源码:
make 最后可以看到程序的运行结果。
2 多组文件的情况 再来看下面这种情况:除了main.c以外,还多出来两组源文件(sum.c+sum.h、sub.c+sub.h)。
2.1 编写c源文件 测试代码仍很简单,sum的函数和上面一样,sub函数以及main的代码如下:
main.c
#include #include sum.h#include sub.hint main(void){ int a = 1; int b = 2; printf(a=%d, b=%d\n, a, b); printf(a+b=%d\n, sum(a, b)); printf(a-b=%d\n, sub(a, b)); return 0;} sub.c
#include sub.hint sub(int a, int b){ return (a - b);} sub.h
#ifndef _sub_h_#define _sub_h_int sub(int a, int b);#endif 注:sum.c和sum.h和之前的一样
2.2 编写cmakelists.txt 注意cmakelists.txt和之前的区别:
cmake_minimum_required (version 2.8)project (sum_sub_test)aux_source_directory(. src_list)add_executable(sum_sub_test main.c ${src_list}) 这里使用aux_source_directory把当前目录(.)下的所有源文件存列表存放到变量src_list里
然后在add_executable里调用src_list,这样,当有再多的源文件,cmakelists也不需要改了
2.3 编译测试 按照之前的编译测试流程进行编译测试,结果如下:
3 总结 本篇介绍了同一目录下有多个源文件时如何编写cmakelists.txt。
对于同个文件夹下有多个源文件,主要还是修改add_executable这句,将需要用到的c文件添加进去即可:
cmake_minimum_required (version 2.8)project (hello)add_executable(sum_test main.c sum.c) 另外,还可以借助aux_source_directory把指定目录下的所有源文件存列表存放到变量中,这样就不受文件数量的影响:
aux_source_directory(. src_list)add_executable(sum_sub_test main.c ${src_list}) 总的来说,一个新的知识点就是aux_source_directory的使用。
浅谈变频器的常见参数
windows Mobile系统简介
十六die NAND闪存诞生:单颗容量64GB
佛山照明与清华大学美术学院正式签署合作协议
关于VM系列振弦传感器测量模块 固件版本SF3.50相较于SF3.33的新特性说明
Linux中CMake的使用2-同目录下多个源文件
南孚推出了一款黑胶唱片无线充电器
防欺诈的燃料分配器流量计传感器的原理及设计
ADC在电路中扮演的作用 衡量ADC性能的几个重要指标
服务机器人市场激增,底盘市场需求迎爆发
Linux ALSA声卡驱动之八:ASoC架构中的Platform
复杂电路简化的基本原则和经典例题
低压断路器由什么组成
鸿海首次公布9名经营委员会成员,未来将走向群体决策共治时代
高通推出下一代 GPU 架构与ISP,带来极致图形及移动拍摄体验
区块链联盟链系统平台梧桐链的技术架构解析
Kumpei Fujita为任天堂发明的游戏控制器
T-Mobile已在美国Metro上推出了阿尔卡特Joy Tab 2
新日本无线用于车载电子的GNSS射频前端模块NJG1159PHH-A宣布量产
多种感知功能的拟人化灵巧手,将进一步协助机器人进一步开拓市场