上篇(Linux中CMake的使用2-同目錄下多個(gè)源文件)介紹了在同一目錄下有多個(gè)源文件時(shí)如何編寫CMakeLists.txt。
本篇繼續(xù)介紹不同目錄下有多個(gè)源文件時(shí)如何編寫CMakeLists.txt
1 有1個(gè)獨(dú)立文件夾
1.1 文件目錄結(jié)構(gòu)
先來(lái)看下面這種情況,文件目錄結(jié)構(gòu)如下,sum.c、sum.h和main.c的代碼內(nèi)容見(jiàn)前面的文章。

1.2 編寫CMakeLists.txt
對(duì)于這種情況,CMakeLists.txt可以有不同的寫法:
寫法1
首先看第一種寫法,如下:
cmake_minimum_required (VERSION 2.8)
project (sum_test)
include_directories (func)
add_executable(sum_test main.c func/sum.c)
這里出現(xiàn)了1個(gè)新的命令:include_directories,用來(lái)指定頭文件的搜索路徑
寫法2
再來(lái)看第二種寫法,如下:
cmake_minimum_required (VERSION 2.8)
project (sum_test)
include_directories (func)
aux_source_directory (func SRC_LIST)
add_executable(sum_test main.c ${SRC_LIST})
可以使用aux_source_directory,將指定目錄下的源文件列表存放到變量中
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 有多個(gè)獨(dú)立文件夾(情況1)
2.1 文件目錄結(jié)構(gòu)
再來(lái)看下面這種情況,文件目錄結(jié)構(gòu)如下,sum.c、sum.h、sub.c、sub.h和main.c的代碼內(nèi)容見(jiàn)前面的文章。
其中sum.c、sum.h、sub.c和sub.h放到func這個(gè)文件夾中:

2.2 編寫CMakeLists.txt
注意CMakeLists.txt和之前的區(qū)別,其實(shí)它和上面的“寫法2”一樣:
cmake_minimum_required (VERSION 2.8)
project (sum_sub_test)
include_directories (func)
aux_source_directory (func SRC_LIST)
add_executable(sum_sub_test main.c ${SRC_LIST})
2.3 編譯測(cè)試
按照之前的編譯測(cè)試流程進(jìn)行編譯測(cè)試,結(jié)果如下:

3 有多個(gè)獨(dú)立文件夾(情況2)
3.1 文件目錄結(jié)構(gòu)
再來(lái)看下面這種情況,文件目錄結(jié)構(gòu)如下,sum.c、sum.h、sub.c、sub.h和main.c的代碼內(nèi)容見(jiàn)前面的文章。
其中sum.c和sum.h放到sumfunc這個(gè)文件夾中,sub.c和sub.h放到subfunc這個(gè)文件夾中:
此次兩種文件分布在兩個(gè)文件夾中:

3.2 編寫CMakeLists.txt
注意CMakeLists.txt和之前的區(qū)別:
cmake_minimum_required (VERSION 2.8)
project (sum_sub_test)
include_directories (sumfunc subfunc)
aux_source_directory (sumfunc SRC_LIST1)
aux_source_directory (subfunc SRC_LIST2)
add_executable(sum_sub_test main.c ${SRC_LIST1} ${SRC_LIST2})
這里使用了兩個(gè)aux_source_directory,將兩個(gè)目錄下的源文件列表分別存放到不同的變量中
3.3 編譯測(cè)試
按照之前的編譯測(cè)試流程進(jìn)行編譯測(cè)試,結(jié)果如下:

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

對(duì)于不同文件夾下的多個(gè)源文件,主要是使用include_directories來(lái)添加頭文件的搜索目錄
cmake_minimum_required (VERSION 2.8)
project (sum_test)
include_directories (func)
add_executable(sum_test main.c func/sum.c)
另外,仍然可以借助aux_source_directory把指定目錄下的所有源文件存列表存放到變量中:
cmake_minimum_required (VERSION 2.8)
project (sum_test)
include_directories (func)
aux_source_directory (func SRC_LIST)
add_executable(sum_test main.c ${SRC_LIST})
總的來(lái)說(shuō),一個(gè)新的知識(shí)點(diǎn)就是include_directories的使用。
審核編輯:湯梓紅
-
Linux
+關(guān)注
關(guān)注
87文章
11496瀏覽量
213254 -
源文件
+關(guān)注
關(guān)注
0文章
30瀏覽量
4764 -
CMake
+關(guān)注
關(guān)注
0文章
28瀏覽量
1483
發(fā)布評(píng)論請(qǐng)先 登錄
支持48位尋址!華為開源文件系統(tǒng)EROFS跨入大模型訓(xùn)練
從零開始馴服Linux(一):ZYNQ-Linux啟動(dòng)文件構(gòu)建全解析
為什么無(wú)法在OpenVINO? 2021.3源中使用CMAKE編譯ONNX模型?
DLP LightCrafter 6500&9000-4.0.1 安裝后,對(duì)其安裝目錄下的Sources文件夾下的源文件用Qt編譯,出現(xiàn)上圖錯(cuò)誤是什么原因?
Linux中的用戶與創(chuàng)建

飛凌嵌入式ElfBoard ELF 1板卡-內(nèi)核源代碼的目錄結(jié)構(gòu)和文件說(shuō)明
Linux文件查找
Linux文件壓縮打包的各種姿勢(shì)
Linux lsof命令的基本用法

Linux開發(fā)怎么學(xué)?
Linux根文件系統(tǒng)的掛載過(guò)程
如何構(gòu)建Linux根文件系統(tǒng)
【米爾NXP i.MX 93開發(fā)板試用評(píng)測(cè)】3、NXP的MCU工程目錄結(jié)構(gòu)和源碼分析
linux--sysfs文件系統(tǒng)

評(píng)論