上篇文章(Linux中CMake的使用1-單個(gè)源文件)介紹了編寫CMakeLists.txt的最基礎(chǔ)用法——只有一個(gè)源文件的情況。
本篇繼續(xù)介紹,在同一目錄下有多個(gè)源文件時(shí)如何編寫CMakeLists.txt。
1 一組文件的情況
先來看下面這種情況:除了main.c以外,只多出來一組源文件(1個(gè).c文件+1個(gè).h文件)。

1.1 編寫C源文件
以一個(gè)簡單的兩數(shù)相加為例,代碼如下:
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的內(nèi)容,和上一篇介紹的對單個(gè)文件進(jìn)行編譯的情況基本一樣:
cmake_minimum_required (VERSION 2.8)
project (sum_test)
add_executable(sum_test main.c sum.c)
注意,同個(gè)目錄有多個(gè)源文件,CMakeLists的主要區(qū)別是在add_executable繼續(xù)增加需要編譯的c文件。
1.3 編譯測試
在當(dāng)前目錄執(zhí)行cmake指令:
cmake .
cmake后面的點(diǎn),用來告訴CMake工具在當(dāng)前目錄中搜尋CMakeLists.txt文件。
自動(dòng)生成makefile文件之后,再使用make指令編譯源碼:
make

最后可以看到程序的運(yùn)行結(jié)果。
2 多組文件的情況
再來看下面這種情況:除了main.c以外,還多出來兩組源文件(sum.c+sum.h、sub.c+sub.h)。

2.1 編寫C源文件
測試代碼仍很簡單,sum的函數(shù)和上面一樣,sub函數(shù)以及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和之前的區(qū)別:
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把當(dāng)前目錄(.
)下的所有源文件存列表存放到變量SRC_LIST里
然后在add_executable里調(diào)用SRC_LIST,這樣,當(dāng)有再多的源文件,CMakeLists也不需要改了
2.3 編譯測試
按照之前的編譯測試流程進(jìn)行編譯測試,結(jié)果如下:

3 總結(jié)
本篇介紹了同一目錄下有多個(gè)源文件時(shí)如何編寫CMakeLists.txt。

對于同個(gè)文件夾下有多個(gè)源文件,主要還是修改add_executable這句,將需要用到的C文件添加進(jìn)去即可:
cmake_minimum_required (VERSION 2.8)
project (hello)
add_executable(sum_test main.c sum.c)
另外,還可以借助aux_source_directory把指定目錄下的所有源文件存列表存放到變量中,這樣就不受文件數(shù)量的影響:
aux_source_directory(. SRC_LIST)
add_executable(sum_sub_test main.c ${SRC_LIST})
總的來說,一個(gè)新的知識點(diǎn)就是aux_source_directory的使用。
-
Linux
+關(guān)注
關(guān)注
87文章
11420瀏覽量
212319 -
源文件
+關(guān)注
關(guān)注
0文章
30瀏覽量
4730 -
CMake
+關(guān)注
關(guān)注
0文章
28瀏覽量
1404
發(fā)布評論請先 登錄
相關(guān)推薦
Linux的目錄文件結(jié)構(gòu)
LINUX目錄文件結(jié)構(gòu)
如何編譯多個(gè)源文件的代碼呢
介紹一下如何基于cmake框架新建一個(gè)全新的項(xiàng)目
Linux改變文件或目錄的訪問權(quán)限命令
Delphi教程之實(shí)現(xiàn)指定目錄下的文件查詢
Cmake學(xué)習(xí)的總結(jié)(三)
嵌入式Linux開發(fā)之文件系統(tǒng)目錄結(jié)構(gòu)介紹

CMake的實(shí)戰(zhàn)教程-2
CMake實(shí)戰(zhàn)教程-2
如何將linux下多種類型的多個(gè)文件復(fù)制到另一個(gè)目錄
CMake構(gòu)建后的項(xiàng)目結(jié)構(gòu)解析

評論