上篇(Linux中CMake的使用2-同目录下多个源文件)介绍了在同一目录下有多个源文件时如何编写CMakeLists.txt。
本篇继续介绍不同目录下有多个源文件时如何编写CMakeLists.txt
1 有1个独立文件夹
1.1 文件目录结构
先来看下面这种情况,文件目录结构如下,sum.c、sum.h和main.c的代码内容见前面的文章。
![Linux中CMake的使用3-不同目录多个源文件-cmake生成sln Linux中CMake的使用3-不同目录多个源文件-cmake生成sln](https://file.elecfans.com/web2/M00/6B/B9/pYYBAGMpxg6AHXY7AACrXL8Iwb4843.png)
1.2 编写CMakeLists.txt
对于这种情况,CMakeLists.txt可以有不同的写法:
写法1
首先看第一种写法,如下:
复制cmake_minimum_required (VERSION 2.8) project (sum_test) include_directories (func) add_executable(sum_test main.c func/sum.c)这里出现了1个新的命令:include_directories,用来指定头文件的搜索路径
写法2
再来看第二种写法,如下:
复制cmake_minimum_required (VERSION 2.8) project (sum_test) include_directories (func) aux_source_directory (func SRC_LIST) add_executable(sum_test main.c ${SRC_LIST})可以使用aux_source_directory,将指定目录下的源文件列表存放到变量中
1.3 编译测试
在当前目录执行cmake指令:
复制cmake .cmake后面的点,用来告诉CMake工具在当前目录中搜寻CMakeLists.txt文件。
自动生成makefile文件之后,再使用make指令编译源码:
复制make![Linux中CMake的使用3-不同目录多个源文件-cmake生成sln1 Linux中CMake的使用3-不同目录多个源文件-cmake生成sln1](https://file.elecfans.com/web2/M00/6B/21/poYBAGMpxhWAZ__WAAJAADxw9uw449.png)
最后可以看到程序的运行结果。
2 有多个独立文件夹(情况1)
2.1 文件目录结构
再来看下面这种情况,文件目录结构如下,sum.c、sum.h、sub.c、sub.h和main.c的代码内容见前面的文章。
其中sum.c、sum.h、sub.c和sub.h放到func这个文件夹中:
![Linux中CMake的使用3-不同目录多个源文件-cmake生成sln2 Linux中CMake的使用3-不同目录多个源文件-cmake生成sln2](https://file.elecfans.com/web2/M00/6B/21/poYBAGMpxhuALLX6AAC1ScxIdBY026.png)
2.2 编写CMakeLists.txt
注意CMakeLists.txt和之前的区别,其实它和上面的“写法2”一样:
复制cmake_minimum_required (VERSION 2.8) project (sum_sub_test) include_directories (func) aux_source_directory (func SRC_LIST) add_executable(sum_sub_test main.c ${SRC_LIST})2.3 编译测试
按照之前的编译测试流程进行编译测试,结果如下:
![Linux中CMake的使用3-不同目录多个源文件-cmake生成sln3 Linux中CMake的使用3-不同目录多个源文件-cmake生成sln3](https://file.elecfans.com/web2/M00/6B/B9/pYYBAGMpxiCAKMKmAAKK0NUnPj0093.png)
3 有多个独立文件夹(情况2)
3.1 文件目录结构
再来看下面这种情况,文件目录结构如下,sum.c、sum.h、sub.c、sub.h和main.c的代码内容见前面的文章。
其中sum.c和sum.h放到sumfunc这个文件夹中,sub.c和sub.h放到subfunc这个文件夹中:
此次两种文件分布在两个文件夹中:
![Linux中CMake的使用3-不同目录多个源文件-cmake生成sln4 Linux中CMake的使用3-不同目录多个源文件-cmake生成sln4](https://file.elecfans.com/web2/M00/6B/21/poYBAGMpxiaANyQWAADZyBwT-N0796.png)
3.2 编写CMakeLists.txt
注意CMakeLists.txt和之前的区别:
复制cmake_minimum_required (VERSION 2.8) project (sum_sub_test) include_directories (sumfunc subfunc) aux_source_directory (sumfunc SRC_LIST1) aux_source_directory (subfunc SRC_LIST2) add_executable(sum_sub_test main.c ${SRC_LIST1} ${SRC_LIST2})这里使用了两个aux_source_directory,将两个目录下的源文件列表分别存放到不同的变量中
3.3 编译测试
按照之前的编译测试流程进行编译测试,结果如下:
![Linux中CMake的使用3-不同目录多个源文件-cmake生成sln5 Linux中CMake的使用3-不同目录多个源文件-cmake生成sln5](https://file.elecfans.com/web2/M00/6B/B9/pYYBAGMpxiyAdQFyAAJeH9Y16vY931.png)
4 总结
本篇介绍了不同目录下有多个源文件时如何编写CMakeLists.txt。
![Linux中CMake的使用3-不同目录多个源文件-cmake生成sln6 Linux中CMake的使用3-不同目录多个源文件-cmake生成sln6](https://file.elecfans.com/web2/M00/6B/B9/pYYBAGMpxjGAWM-fAAZch3FOWZo591.png)
对于不同文件夹下的多个源文件,主要是使用include_directories来添加头文件的搜索目录
复制cmake_minimum_required (VERSION 2.8) project (sum_test) include_directories (func) add_executable(sum_test main.c func/sum.c)另外,仍然可以借助aux_source_directory把指定目录下的所有源文件存列表存放到变量中:
复制cmake_minimum_required (VERSION 2.8) project (sum_test) include_directories (func) aux_source_directory (func SRC_LIST) add_executable(sum_test main.c ${SRC_LIST})总的来说,一个新的知识点就是include_directories
的使用。
审核编辑:汤梓红