上篇文章(Linux中CMake的使用1-單個(gè)源文件)介紹了編寫(xiě)CMakeLists.txt的最基礎(chǔ)用法——只有一個(gè)源文件的情況。
本篇繼續(xù)介紹,在同一目錄下有多個(gè)源文件時(shí)如何編寫(xiě)CMakeLists.txt。
1 一組文件的情況
先來(lái)看下面這種情況:除了main.c以外,只多出來(lái)一組源文件(1個(gè).c文件+1個(gè).h文件)。
1.1 編寫(xiě)C源文件
以一個(gè)簡(jiǎn)單的兩數(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 編寫(xiě)CMakeLists.txt
CMakeLists.txt的內(nèi)容,和上一篇介紹的對(duì)單個(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 編譯測(cè)試
在當(dāng)前目錄執(zhí)行cmake指令:
cmake .
cmake后面的點(diǎn),用來(lái)告訴CMake工具在當(dāng)前目錄中搜尋CMakeLists.txt文件。
自動(dòng)生成makefile文件之后,再使用make指令編譯源碼:
make
最后可以看到程序的運(yùn)行結(jié)果。
2 多組文件的情況
再來(lái)看下面這種情況:除了main.c以外,還多出來(lái)兩組源文件(sum.c+sum.h、sub.c+sub.h)。
2.1 編寫(xiě)C源文件
測(cè)試代碼仍很簡(jiǎn)單,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 編寫(xiě)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 編譯測(cè)試
按照之前的編譯測(cè)試流程進(jìn)行編譯測(cè)試,結(jié)果如下:
3 總結(jié)
本篇介紹了同一目錄下有多個(gè)源文件時(shí)如何編寫(xiě)CMakeLists.txt。
對(duì)于同個(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})
總的來(lái)說(shuō),一個(gè)新的知識(shí)點(diǎn)就是aux_source_directory的使用。
-
Linux
+關(guān)注
關(guān)注
87文章
11304瀏覽量
209476 -
源文件
+關(guān)注
關(guān)注
0文章
30瀏覽量
4586 -
CMake
+關(guān)注
關(guān)注
0文章
28瀏覽量
1273
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論