多个源文件
上篇我们学习了单个源文件的cmake 的编译,不过一个源文件的例子似乎没什么意思,我们再加入一个hello.h 头文件和 hello.c 源文件。在 hello.c 文件中 定义了一个函数 hello,然后在 main.c 源文件中将会调用该函数:
⚫ hello.h 文件内容
#ifndef __TEST_HELLO_
#define __TEST_HELLO_
void hello(const char *name);
#endif //__TEST_HELLO_
⚫ hello.c 文件内容
#include <stdio.h>
#include "hello.h"
void hello(const char *name){
printf("Hello %s!\n", name);
}
⚫ main.c 文件内容
#include "hello.h"
int main(void){
hello("World");
return 0;
}
⚫ 然后准备好 CMakeLists.txt 文件
project(HELLO)
set(SRC_LIST main.c hello.c)
add_executable(hello ${SRC_LIST})
工程目录结构如下所示:
├── build //文件夹
├── CMakeLists.txt
├── hello.c
├── hello.h
└── main.c
同样,进入到build目录下,执行cmake、再执行make编译工程,最终就会得到可执行文件 hello。
在本例子中,CMakeLists.txt 文件中使用到了 set 命令,set 命令用于设置变量,如果变量不存在则创建该变量并设置它;在本例中,我们定义了一个 SRC_LIST 变量,SRC_LIST 变量是一个源文件列表,记录生成可执行文件 hello 所需的源文件 main.c 和 hello.c,而在 add_executable 命令引用了该变量;当然我们也可以不去定义 SRC_LIST 变量,直接将源文件列表写在 add_executable 命令中,如下:
add_executable(hello main.c hello.c)
生成库文件
在本例中,除了生成可执行文件 hello 之外,我们还需要将 hello.c 编译