前言
在學習CMake
之前,一直都是自己在手敲Makefile
文件,當項目的文件一旦多了起來,自己手動寫Makefile
就不是那么好玩了,也曾經了解了一下autotools
,但是seeed的柱哥說有CMake
這個東西,所以我就去學習了,也在網上搜過對比,下面的一句話讓我果斷放棄了autotools
:
CMake產生的晚,解決了很多autotools工具的問題
其實吧,簡單來說CMake
就是生成Makefile的自動化構建工具(自動生成Makefile文件,不需要我們自己寫Makefile),引用一句官方的描述就是:
CMake 是一個跨平臺的構建系統生成工具。它使用平臺無關的 CMake 清單文件CMakeLists.txt,指定工程的構建過程;源碼樹的每個路徑下都有這個文件。CMake 產生一個適用于具體平臺的構建系統,用戶使用這個系統構建自己的工程。
安裝CMake
- 開發環境:
Ubuntu
一句代碼的事安裝CMake
:
sudo apt-get install cmake
檢測安裝是否成功:
cmake --version
# 輸出
cmake version 3.10.2
CMake suite maintained and supported by Kitware (kitware.com/cmake).
如果你用的是vscode
寫代碼的話,最好還是裝一個CMake
插件,更加方便:
cmake插件
關于其他的一些注意事項,你需要編譯c代碼,起碼Ubuntu得有個gcc編譯器啥的吧~如果沒有就直接安裝得了….### 初步了解CMake
其實呢,CMake
是非常簡單易用的,我們寫代碼無非就是將寫好的代碼進行編譯生成可執行文件,那么就可以用CMake
生成 Makefile 文件并編譯源代碼!
它的流程基本如下:
- 編寫
CMake
配置文件CMakeLists.txt
。 - 執行
cmake PATH
命令生成Makefile
。其中,PATH
是CMakeLists.txt
所在的目錄。 - 使用
make
命令進行編譯。(既然步驟2的時候就生成Makefile
文件了,那么肯定是可以直接make
編譯啦)
基本語法
一個最基本的CmakeLists.txt
文件最少需要包含以下3行代碼:
# CMake 最低版本號要求
cmake_minimum_required (VERSION 2.8)
# 項目信息
project (section1)
# 指定生成目標
add_executable(section1 main.c)
注意 :CMake
的語法支持大寫、小寫甚至是大小寫混合的,實在是太變態了,不過呢,在杰杰的提供例程中使用的CMake
語法是小寫的,全局變量是大寫的,局部變量是小寫!
section1
廢話不多說,直接入門實戰吧,寫代碼這東西還是要親自動手去寫采用意義~
- 文件夾目錄結構如下:
jie@pc:~/github/cmake/section1$ tree
.
├── CMakeLists.txt
└── main.c
0 directories, 2 files
非常簡單,也就是一個main.c
文件與一個CMakeLists.txt
文件,內容更是簡單,main.c
就只是打印個"Hello World!"
:
#include
int main(void)
{
printf("Hello World!\\n");
return 0;
}
CMakeLists.txt
就是CMake
最基礎的3行代碼:
# CMake 最低版本號要求
cmake_minimum_required (VERSION 2.8)
# 項目信息
project (section1)
# 指定生成目標
add_executable(section1 main.c)
這樣子可以在該目錄下直接運行以下命令去編譯(注意有一個 點.
,表示CMakeLists.txt
所在的目錄):
cmake .
編譯輸出信息如下:
jie@pc:~/github/cmake/section1$ cmake .
-- The C compiler identification is GNU 7.4.0
-- The CXX compiler identification is GNU 7.4.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/jie/github/cmake/section1
然后你就會看到生成了一些其他文件文件以及一個Makefile
文件:
jie@pc:~/github/cmake/section1$ ls
CMakeCache.txt CMakeFiles cmake_install.cmake CMakeLists.txt main.c Makefile
既然有Makefile
文件那么就可以直接運行make
命令去編譯源碼文件了,最后輸出“Built target section1”
表示編譯成功!最終目錄下會多出一個section1
可執行文件,然后你運行它就能看到代碼的執行效果了,直接打印輸出"Hello World!"
。
jie@pc:~/github/cmake/section1$ make
Scanning dependencies of target section1
[ 50%] Building C object CMakeFiles/section1.dir/main.c.o
[100%] Linking C executable section1
[100%] Built target section1
CMakeLists.txt分析
# CMake 最低版本號要求
cmake_minimum_required (VERSION 2.8)
# 項目信息
project (section1)
# 指定生成目標
add_executable(section1 main.c)
其實上面的三句代碼看起來像是函數,但并不是函數而是命令,它跟我們的在linux
的命令差不多,反正就是指定CMake
要怎么做的一系列命令。比如:
cmake_minimum_required
:設置一個工程所需要的最低CMake
版本,如果CMake
的當前版本低于指定的版本,它會停止處理工程文件,并報告錯誤。project
:為整個工程設置一個工程名。add_executable
:使用給定的源文件,為工程引入一個可執行文件。
add_executable( [WIN32] [MACOSX_BUNDLE]
[EXCLUDE_FROM_ALL]
source1 [source2 ...])
引入一個名字為
的可執行目標,這個可執行目標會由調用該命令時在源文件列表中指定的源文件來構建,比如main.c
就是一個源碼文件。
在工程范圍內必須是全局唯一的,它實際上就是make編譯后生成的可執行文件。
順便再提一下語法,上面的代碼呢,
是必須填寫的,然后也必須有一個源碼文件source1
,當然有可以有多個源碼文件[source2 ...]
。
對了,#
后面的是注釋,這根C語言中//
表示注釋是一樣的!
代碼下載
https://github.com/jiejieTop/cmake
-
源碼
+關注
關注
8文章
652瀏覽量
29455 -
系統構建
+關注
關注
0文章
7瀏覽量
6843 -
CMake
+關注
關注
0文章
28瀏覽量
1306
發布評論請先 登錄
相關推薦
Windows下編譯工具CMake的安裝和最簡使用
![Windows下編譯工具<b class='flag-5'>CMake</b>的安裝和最簡使用](https://file1.elecfans.com/web2/M00/AF/E1/wKgZomVS2U2ASacQAAAPVCut6ZY500.png)
![](https://file1.elecfans.com/web2/M00/88/6C/wKgaomRmq66ACnIPAAGOdn6n7bU944.png)
Cmake學習的總結(二)
cmake管理配置ROOT項目的方法
![<b class='flag-5'>cmake</b>管理配置ROOT項目的方法](https://file.elecfans.com/web1/M00/DA/F3/o4YBAGAFWSWAb9ddAAJwNvss8v8970.png)
如何使用CMake工具套件構建CUDA應用程序
![如何使用<b class='flag-5'>CMake</b>工具套件構建CUDA應用程序](https://file.elecfans.com/web2/M00/3B/08/pYYBAGJGypWASkICAAC8wcAjy8s500.png)
RT-Thread V4.1.0新特性CMake介紹與構建CMake工程
RT-Thread 4.1.0的CMake構建教程
CMake的實戰教程-2
CMake實戰教程-2
在Linux下如何使用CMake編譯程序
![在Linux下如何使用<b class='flag-5'>CMake</b>編譯程序](https://file1.elecfans.com/web2/M00/AD/0C/wKgaomVLO4mARvmyAABniPPNX20357.jpg)
CMake構建后的項目結構解析
![<b class='flag-5'>CMake</b>構建后的項目結構解析](https://file1.elecfans.com/web2/M00/AD/68/wKgaomVNlNqABZE0AACQ_0qe0Es164.jpg)
評論