1 引言
linux中進(jìn)行C/C++開(kāi)發(fā),一般都是先用編輯器寫(xiě)好代碼,然后使用gcc工具來(lái)編譯程序。
文件數(shù)量不多的工程,可以直接敲gcc命令進(jìn)行編譯。對(duì)于文件較多的工程,就要使用Makefile來(lái)管理代碼的編譯了。
而手動(dòng)編寫(xiě)Makefile其實(shí)也是具有一定的難度的,更方便的方式是使用更易編寫(xiě)CMake來(lái)自動(dòng)生成Makefile。
2 Linux中安裝CMake
這里插一句,在Window系統(tǒng)中,許多人也用過(guò)CMake,它可以配合集成開(kāi)發(fā)環(huán)境如Visual Studio,通過(guò)圖形化的操作界面,操作CMake圖形界面進(jìn)行代碼的編譯。
本篇介紹的,在Linux中使用CMake,還用不到圖形界面,仍然是文本編輯的方式使用CMake。
CMake在Linux的安裝,直接使用命令安裝即可:
sudo apt install cmake
安裝完成之后可以查看cmake的版本,我用的是3.10.2
3 編譯單個(gè)文件的CMake基礎(chǔ)示例
3.1 編寫(xiě)C源文件
首先寫(xiě)一個(gè)最簡(jiǎn)單的hello word程序,hello.c:
#include int main(void) { printf("Hello World\n"); return 0; }
3.2 編寫(xiě)CMakeLists.txt
然后在相同目錄下編寫(xiě)CMakeLists.txt:
cmake_minimum_required (VERSION 2.8) project (hello) add_executable(hello hello.c)
這是一個(gè)最基礎(chǔ)的CMake使用模板,這3行的含義如下:
第一行:要求cmake的最低版本為2.8
第二行:工程名
第三行:生成的可執(zhí)行文件名為hello,使用的源文件為hello.c
注:以上3條,add_executable起主要作用,前兩條去掉也可以運(yùn)行
3.3 執(zhí)行cmake指令生成Makefile
然后輸入以下命令運(yùn)行cmake,從而幫我們自動(dòng)生成makefile文件:
cmake .
這個(gè)“點(diǎn)”表示是當(dāng)前目錄搜索源文件。
cmake指令的執(zhí)行結(jié)果如下:
可以看下CMake生成的makefile文件,相比較自己手寫(xiě)的makefile,這個(gè)自動(dòng)生成的makefile,內(nèi)容很多:
3.4 執(zhí)行make指令編譯代碼
makefile文件產(chǎn)生之后,就可以使用make指令來(lái)編譯源代碼了:
make
執(zhí)行make指令之后,可以看到生成了可執(zhí)行文件hello,運(yùn)行這個(gè)hello文件,就可以看到程序的輸出了:
4 總結(jié)
本篇介紹了Liunx中如何使用CMake來(lái)生成makefile,進(jìn)行進(jìn)行源程序的編譯。
將上述的CMake編譯單個(gè)源文件的使用操作總結(jié)為一張圖:
編寫(xiě)CMake主要就是編寫(xiě)CMakeLists.txt,基礎(chǔ)模板為:
cmake_minimum_required (VERSION 2.8) project (hello) add_executable(hello hello.c)
其中最主要的一句就是:
add_executable(hello hello.c)
審核編輯:劉清
-
Linux
+關(guān)注
關(guān)注
87文章
11351瀏覽量
210497 -
gcc編譯器
+關(guān)注
關(guān)注
0文章
78瀏覽量
3432
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
Linux文件查找
Linux文件壓縮打包的各種姿勢(shì)
使用lsof實(shí)現(xiàn)對(duì)linux文件的誤刪除恢復(fù)練習(xí)
![使用lsof實(shí)現(xiàn)對(duì)<b class='flag-5'>linux</b><b class='flag-5'>文件</b>的誤刪除恢復(fù)練習(xí)](https://file1.elecfans.com/web1/M00/F5/C3/wKgaoWdCmqmAA124AAAjwC2g6tA394.png)
Linux根文件系統(tǒng)的掛載過(guò)程
如何構(gòu)建Linux根文件系統(tǒng)
linux--sysfs文件系統(tǒng)
![<b class='flag-5'>linux</b>--sysfs<b class='flag-5'>文件</b>系統(tǒng)](https://file1.elecfans.com/web2/M00/F9/A4/wKgZomaLXwqAbGxzAAAQ6QVA7SI028.png)
百問(wèn)網(wǎng)全志D1h開(kāi)發(fā)板LVGL9移植詳細(xì)教程
剛剛裝好esp32 elipse CMAKE編譯環(huán)境,hello word編譯不通過(guò)怎么解決?
VSCode中編譯過(guò)程cmake錯(cuò)誤的原因?
嵌入式學(xué)習(xí)-飛凌嵌入式ElfBoard ELF 1板卡-如何移植NCNN?
飛凌嵌入式ElfBoard ELF 1板卡-如何移植NCNN
1-寬輸入范圍降壓SWIFT?轉(zhuǎn)換器TPS5410數(shù)據(jù)表
![<b class='flag-5'>1-</b>寬輸入范圍降壓SWIFT?轉(zhuǎn)換器TPS5410數(shù)據(jù)表](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
電流限制1-? 智能負(fù)載開(kāi)關(guān)TPS22951數(shù)據(jù)表
![電流限制<b class='flag-5'>1-</b>? 智能負(fù)載開(kāi)關(guān)TPS22951數(shù)據(jù)表](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評(píng)論