/\*
\*\* testFunc1.h
\*/
#ifndef \_TEST\_FUNC1\_H\_
#define \_TEST\_FUNC1\_H\_
void func1(int data);
#endif
再修改main.c,调用testFunc1.h里声明的函数func1():
#include <stdio.h>
#include "testFunc.h"
#include "testFunc1.h"
int main(void)
{
func(100);
func1(200);
return 0;
}
修改CMakeLists.txt:
cmake_minimum_required(VERSION 2.8)
project(demo)
aux_source_directory(. SRC_LIST)
add_executable(main ${SRC_LIST})
使用aux_source_directory
把当前目录下的源文件存列表存放到变量SRC_LIST
里,然后在add_executable
里调用SRC_LIST
(注意调用变量时的写法)。再次执行cmake .
和make
,并运行main:
可以看到运行成功了。
aux_source_directory()
也存在弊端,它会把指定目录下的所有源文件都加进来,可能会加入一些我们不需要的文件,此时我们可以使用set命令去新建变量来存放需要的源文件,如下:
cmake_minimum_required (VERSION 2.8)
project (demo)
set( SRC_LIST
./main.c
./testFunc1.c
./testFunc.c)
add_executable(main ${SRC_LIST})
四、 不同目录下多个源文件
一般来说,当程序文件比较多时,我们会进行分类管理,把代码根据功能放在不同的目录下,这样方便查找。那么这种情况下如何编写CMakeLists.txt呢?
我们把之前的源文件整理一下(新建2个目录test_func和test_func1),整理好后整体文件结构如下:
把之前的testFunc.c和testFunc.h放到test_func目录下,testFunc1.c和testFunc1.h则放到test_func1目录下。其中,CMakeLists.txt和main.c在同一目录下,内容修改成如下所示:
cmake_minimum_required(VERSION 2.8)
project(demo)
include_directories(test_func test_func1)
aux_source_directory(test_func SRC_LIST)
aux_source_directory(test_func1 SRC_LIST1)
add_executable(main main.c ${SRC_LIST} ${SRC_LIST1})
这里出现了一个新的命令:include_directories
。该命令是用来向工程添加多个指定头文件的搜索路径,路径之间用空格分隔。
因为main.c里include了testFunc.h和testFunc1.h,如果没有这个命令来指定头文件所在位置,就会无法编译。当然,也可以在main.c里使用include来指定路径,如下
#include "test\_func/testFunc.h"
#include "test\_func1/testFunc1.h"
只是这种写法不好看。
另外,我们使用了2次aux_source_dire