上篇文章介绍了编写CMakeLists.txt的最基础用法——只有一个源文件的情况。
本篇继续介绍,在同一目录下有多个源文件时如何编写CMakeLists.txt。
1 一组文件的情况先来看下面这种情况:除了main.c以外,只多出来一组源文件(1个.c文件+1个.h文件)。
1.1 编写C源文件以一个简单的两数相加为例,代码如下:
main.c
#include
sum.c
#include "sum.h"int 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.txtCMakeLists.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
sub.c
#include "sub.h"int 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的使用。
目录下的所有源文件存列表存放到变量中,这样就不受文件数量的影响:
aux_source_directory(、SRC_LIST)add_executable(sum_sub_test main.c ${SRC_LIST})
总的来说,一个新的知识点就是aux_source_directory的使用。