上篇文章(Linux中CMake的使用1-單個源文件)介紹了編寫CMakeLists.txt的最基礎用法——只有一個源文件的情況。
本篇繼續介紹,在同一目錄下有多個源文件時如何編寫CMakeLists.txt。
1 一組文件的情況
先來看下面這種情況:除了main.c以外,只多出來一組源文件(1個.c文件+1個.h文件)。
1.1 編寫C源文件
以一個簡單的兩數相加為例,代碼如下:
main.c
#include
#include "sum.h"
int 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.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.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.h"
int 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.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的使用。
-
Linux
+關注
關注
87文章
11232瀏覽量
208948 -
源文件
+關注
關注
0文章
30瀏覽量
4571 -
CMake
+關注
關注
0文章
28瀏覽量
1262
發布評論請先 登錄
相關推薦
評論