本篇介紹當(dāng)源文件與編譯文件獨(dú)立存放時(shí),如何編寫CMakeLists.txt。
1只使用一個(gè)CMakeLists.txt
1.1 目錄結(jié)構(gòu)
文件目錄結(jié)構(gòu)如下,sum.c、sum.h、sub.c、sub.h和main.c的代碼內(nèi)容見前面的文章。
其中sum.h和sub.h放到include這個(gè)文件夾中,main.c、sum.c和sub.c放到src這個(gè)文件夾中。
在整個(gè)工程中,只有一個(gè)CMakeLists.txt:
![pYYBAGMrImeAOwP9AAC05JSEiH0714.png](https://file.elecfans.com/web2/M00/6B/F7/pYYBAGMrImeAOwP9AAC05JSEiH0714.png)
1.2 CMakeLists.txt
cmake_minimum_required (VERSION 2.8)
project (sum_sub_test)
include_directories (include)
aux_source_directory (src SRC_LIST)
add_executable (sum_sub_test ${SRC_LIST})
set (EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
最后一句是一個(gè)新的知識(shí)點(diǎn):
EXECUTABLE_OUTPUT_PATH:CMake自帶的預(yù)定義變量,表示可執(zhí)行文件的存放位置
PROJECT_SOURCE_DIR:CMake自帶的預(yù)定義變量,表示工程的根目錄
set指令:用于定義變量,即指定可執(zhí)行文件存放在工程根目錄下的bin目錄中
1.3 運(yùn)行測試
![poYBAGMrIm-ABCWUAAJ-1ZPUIV8858.png](https://file.elecfans.com/web2/M00/6B/5F/poYBAGMrIm-ABCWUAAJ-1ZPUIV8858.png)
2 頂層+子層CMakeLists.txt
一個(gè)工程,可以不只有一個(gè)CMakeLists.txt,通過層級(jí)間的管理,可以實(shí)現(xiàn)頂層對(duì)底層的調(diào)用。
2.1 目錄結(jié)構(gòu)
文件目錄結(jié)構(gòu)如下,sum.c、sum.h、sub.c、sub.h和main.c的代碼內(nèi)容見前面的文章。
其中sum.h和sub.h放到include這個(gè)文件夾中,main.c、sum.c和sub.c放到src這個(gè)文件夾中。
在整個(gè)工程中,外出有一個(gè)CMakeLists.txt,子層src目錄中也有一個(gè)CMakeLists.txt:
![poYBAGMrInaAAceHAADFaC6CL1A628.png](https://file.elecfans.com/web2/M00/6B/5F/poYBAGMrInaAAceHAADFaC6CL1A628.png)
2.2 CMakeLists.txt
2.2.1 頂層CMakeLists.txt
cmake_minimum_required (VERSION 2.8)
project (sum_sub_test)
add_subdirectory (src)
最后一句是一個(gè)新的知識(shí)點(diǎn):
add_subdirectory():向當(dāng)前工程添加存放源文件的子目錄
這里指定的是在src目錄下存放了源文件
當(dāng)執(zhí)行cmake指令時(shí),就會(huì)進(jìn)入src目錄下去找下一級(jí)的CMakeLists.txt
所以在src目錄下也必須要有一個(gè)子層的CMakeLists.txt
2.2.2 子層CMakeLists.txt
include_directories (../include)
aux_source_directory (. SRC_LIST)
add_executable(sum_sub_test ${SRC_LIST})
set (EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
最后的set語句剛才已經(jīng)見過了,就是指定可執(zhí)行文件的輸出位置。
2.3 運(yùn)行測試
![poYBAGMrIn6AB5-jAAJogwHTdaE221.png](https://file.elecfans.com/web2/M00/6B/5F/poYBAGMrIn6AB5-jAAJogwHTdaE221.png)
3 總結(jié)
本篇介紹了源文件與編譯文件獨(dú)立存放時(shí),如何編寫CMakeLists.txt。
![pYYBAGMrIoSAZHmrAAEi5S1FkQM322.png](https://file.elecfans.com/web2/M00/6B/F7/pYYBAGMrIoSAZHmrAAEi5S1FkQM322.png)
cmake_minimum_required (VERSION 2.8)
project (sum_sub_test)
include_directories (include)
aux_source_directory (src SRC_LIST)
add_executable (sum_sub_test ${SRC_LIST})
set (EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
新引入的知識(shí)點(diǎn)是最后這句,通過set來指定可執(zhí)行文件的輸出位置:
set (EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
以及使用頂層+子層的CMakeLists.txt時(shí),通過add_subdirectory來指定子層源文件的目錄:
add_subdirectory (src)
并在相應(yīng)的子層目錄中再編寫CMakeLists.txt。
-
Linux
+關(guān)注
關(guān)注
87文章
11351瀏覽量
210497 -
編譯
+關(guān)注
關(guān)注
0文章
662瀏覽量
33066 -
CMake
+關(guān)注
關(guān)注
0文章
28瀏覽量
1309
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
Linux中CMake的使用3-不同目錄多個(gè)源文件
![<b class='flag-5'>Linux</b><b class='flag-5'>中</b><b class='flag-5'>CMake</b>的使用3-不同目錄多個(gè)源<b class='flag-5'>文件</b>](https://file.elecfans.com//web2/M00/6B/B9/pYYBAGMpxqWAQEl2AAA7_QTJWds909.png)
Windows下編譯工具CMake的安裝和最簡使用
![Windows下<b class='flag-5'>編譯</b>工具<b class='flag-5'>CMake</b>的安裝和最簡使用](https://file1.elecfans.com/web2/M00/AF/E1/wKgZomVS2U2ASacQAAAPVCut6ZY500.png)
【DragonBoard 410c試用體驗(yàn)】使用cmake編譯opencv工程
STM32幫忙編譯文件,有原代碼,自已不會(huì)編譯,有人會(huì)搞嗎?
Cmake構(gòu)建linux工程的步驟
請(qǐng)問全志A40i能否單獨(dú)編譯驅(qū)動(dòng)模塊?如何編譯?
aarch64-linux-gnu-gcc能不能編譯文件系統(tǒng)
Linux中CMake的使用2-同目錄下多個(gè)源文件
![<b class='flag-5'>Linux</b><b class='flag-5'>中</b><b class='flag-5'>CMake</b>的使用2-同目錄下多個(gè)源<b class='flag-5'>文件</b>](https://file.elecfans.com//web2/M00/6A/E1/poYBAGModKSAT-uOAABAFshCVjY623.png)
在Linux下如何使用CMake編譯程序
![在<b class='flag-5'>Linux</b>下如何使用<b class='flag-5'>CMake</b><b class='flag-5'>編譯</b>程序](https://file1.elecfans.com/web2/M00/AD/0C/wKgaomVLO4mARvmyAABniPPNX20357.jpg)
CMake構(gòu)建后的項(xiàng)目結(jié)構(gòu)解析
![<b class='flag-5'>CMake</b>構(gòu)建后的項(xiàng)目結(jié)構(gòu)解析](https://file1.elecfans.com/web2/M00/AD/68/wKgaomVNlNqABZE0AACQ_0qe0Es164.jpg)
評(píng)論