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

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

最后可以看到程序的運行結(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 編譯測試
按照之前的編譯測試流程進行編譯測試,結(jié)果如下:

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

對于同個文件夾下有多個源文件,主要還是修改add_executable這句,將需要用到的C文件添加進去即可:
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})
總的來說,一個新的知識點就是aux_source_directory的使用。
-
Linux
+關(guān)注
關(guān)注
88文章
11579瀏覽量
217013 -
源文件
+關(guān)注
關(guān)注
0文章
30瀏覽量
4856 -
CMake
+關(guān)注
關(guān)注
0文章
28瀏覽量
1677
發(fā)布評論請先 登錄
Linux的目錄文件結(jié)構(gòu)
LINUX目錄文件結(jié)構(gòu)
如何編譯多個源文件的代碼呢
介紹一下如何基于cmake框架新建一個全新的項目
Linux改變文件或目錄的訪問權(quán)限命令
Delphi教程之實現(xiàn)指定目錄下的文件查詢
Cmake學(xué)習(xí)的總結(jié)(三)
嵌入式Linux開發(fā)之文件系統(tǒng)目錄結(jié)構(gòu)介紹

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

評論