RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

CMake的實(shí)戰(zhàn)教程-1

汽車電子技術(shù) ? 來源:物聯(lián)網(wǎng)IoT開發(fā) ? 作者:杰杰mcu ? 2023-02-14 10:42 ? 次閱讀

前言

在學(xué)習(xí)CMake之前,一直都是自己在手敲Makefile文件,當(dāng)項(xiàng)目的文件一旦多了起來,自己手動(dòng)寫Makefile就不是那么好玩了,也曾經(jīng)了解了一下autotools,但是seeed的柱哥說有CMake這個(gè)東西,所以我就去學(xué)習(xí)了,也在網(wǎng)上搜過對(duì)比,下面的一句話讓我果斷放棄了autotools

CMake產(chǎn)生的晚,解決了很多autotools工具的問題

其實(shí)吧,簡單來說CMake就是生成Makefile的自動(dòng)化構(gòu)建工具(自動(dòng)生成Makefile文件,不需要我們自己寫Makefile),引用一句官方的描述就是:

CMake 是一個(gè)跨平臺(tái)的構(gòu)建系統(tǒng)生成工具。它使用平臺(tái)無關(guān)的 CMake 清單文件CMakeLists.txt,指定工程的構(gòu)建過程;源碼樹的每個(gè)路徑下都有這個(gè)文件。CMake 產(chǎn)生一個(gè)適用于具體平臺(tái)的構(gòu)建系統(tǒng),用戶使用這個(gè)系統(tǒng)構(gòu)建自己的工程。

安裝CMake

  • 開發(fā)環(huán)境: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寫代碼的話,最好還是裝一個(gè)CMake插件,更加方便:

圖片

cmake插件

關(guān)于其他的一些注意事項(xiàng),你需要編譯c代碼,起碼Ubuntu得有個(gè)gcc編譯器啥的吧~如果沒有就直接安裝得了….### 初步了解CMake

其實(shí)呢,CMake是非常簡單易用的,我們寫代碼無非就是將寫好的代碼進(jìn)行編譯生成可執(zhí)行文件,那么就可以用CMake 生成 Makefile 文件并編譯源代碼!

它的流程基本如下:

  1. 編寫 CMake配置文件 CMakeLists.txt 。
  2. 執(zhí)行cmake PATH命令生成 Makefile。其中, PATHCMakeLists.txt 所在的目錄。
  3. 使用 make 命令進(jìn)行編譯。(既然步驟2的時(shí)候就生成Makefile文件了,那么肯定是可以直接make編譯啦)

基本語法

一個(gè)最基本的CmakeLists.txt文件最少需要包含以下3行代碼:

# CMake 最低版本號(hào)要求
cmake_minimum_required (VERSION 2.8)

# 項(xiàng)目信息
project (section1)

# 指定生成目標(biāo)
add_executable(section1 main.c)

注意CMake的語法支持大寫、小寫甚至是大小寫混合的,實(shí)在是太變態(tài)了,不過呢,在杰杰的提供例程中使用的CMake語法是小寫的,全局變量是大寫的,局部變量是小寫!

section1

廢話不多說,直接入門實(shí)戰(zhàn)吧,寫代碼這東西還是要親自動(dòng)手去寫采用意義~

  • 文件夾目錄結(jié)構(gòu)如下:
jie@pc:~/github/cmake/section1$ tree
.
├── CMakeLists.txt
└── main.c

0 directories, 2 files

非常簡單,也就是一個(gè)main.c文件與一個(gè)CMakeLists.txt文件,內(nèi)容更是簡單,main.c就只是打印個(gè)"Hello World!"

#include 

int main(void)
{
    printf("Hello World!\\n");
    return 0;
}

CMakeLists.txt就是CMake最基礎(chǔ)的3行代碼:

# CMake 最低版本號(hào)要求
cmake_minimum_required (VERSION 2.8)

# 項(xiàng)目信息
project (section1)

# 指定生成目標(biāo)
add_executable(section1 main.c)

這樣子可以在該目錄下直接運(yùn)行以下命令去編譯(注意有一個(gè) 點(diǎn). ,表示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

然后你就會(huì)看到生成了一些其他文件文件以及一個(gè)Makefile文件:

jie@pc:~/github/cmake/section1$ ls
CMakeCache.txt  CMakeFiles  cmake_install.cmake  CMakeLists.txt  main.c  Makefile

既然有Makefile文件那么就可以直接運(yùn)行make命令去編譯源碼文件了,最后輸出“Built target section1”表示編譯成功!最終目錄下會(huì)多出一個(gè)section1可執(zhí)行文件,然后你運(yùn)行它就能看到代碼的執(zhí)行效果了,直接打印輸出"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 最低版本號(hào)要求
cmake_minimum_required (VERSION 2.8)

# 項(xiàng)目信息
project (section1)

# 指定生成目標(biāo)
add_executable(section1 main.c)

其實(shí)上面的三句代碼看起來像是函數(shù),但并不是函數(shù)而是命令,它跟我們的在linux的命令差不多,反正就是指定CMake要怎么做的一系列命令。比如:

  • cmake_minimum_required:設(shè)置一個(gè)工程所需要的最低 CMake版本,如果 CMake的當(dāng)前版本低于指定的版本,它會(huì)停止處理工程文件,并報(bào)告錯(cuò)誤。
  • project:為整個(gè)工程設(shè)置一個(gè)工程名。
  • add_executable:使用給定的源文件,為工程引入一個(gè)可執(zhí)行文件。
add_executable( [WIN32] [MACOSX_BUNDLE]
                [EXCLUDE_FROM_ALL]
                source1 [source2 ...])

引入一個(gè)名字為的可執(zhí)行目標(biāo),這個(gè)可執(zhí)行目標(biāo)會(huì)由調(diào)用該命令時(shí)在源文件列表中指定的源文件來構(gòu)建,比如main.c就是一個(gè)源碼文件。在工程范圍內(nèi)必須是全局唯一的,它實(shí)際上就是make編譯后生成的可執(zhí)行文件。

順便再提一下語法,上面的代碼呢,是必須填寫的,然后也必須有一個(gè)源碼文件source1,當(dāng)然有可以有多個(gè)源碼文件[source2 ...]

圖片

對(duì)了,# 后面的是注釋,這根C語言//表示注釋是一樣的!

代碼下載

https://github.com/jiejieTop/cmake

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 源碼
    +關(guān)注

    關(guān)注

    8

    文章

    639

    瀏覽量

    29185
  • 系統(tǒng)構(gòu)建
    +關(guān)注

    關(guān)注

    0

    文章

    7

    瀏覽量

    6825
  • CMake
    +關(guān)注

    關(guān)注

    0

    文章

    28

    瀏覽量

    1271
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    cmake是什么?cmake的特性和編譯原理(cmake原理和cmake編譯過程)

    CMake是一個(gè)開源、跨平臺(tái)的工具系列,是用來構(gòu)建、測試和打包軟件。
    的頭像 發(fā)表于 07-18 10:53 ?4632次閱讀
    <b class='flag-5'>cmake</b>是什么?<b class='flag-5'>cmake</b>的特性和編譯原理(<b class='flag-5'>cmake</b>原理和<b class='flag-5'>cmake</b>編譯過程)

    Windows下編譯工具CMake的安裝和最簡使用

    MCU的開發(fā)環(huán)境一般在Windows操作系統(tǒng)上,簡單的工程一般直接編寫Makefile文件后使用make工具構(gòu)建程序,復(fù)雜的工程一般借助CMake來生成Makefile文件后使用make工程構(gòu)建程序
    的頭像 發(fā)表于 11-14 10:18 ?8128次閱讀
    Windows下編譯工具<b class='flag-5'>CMake</b>的安裝和最簡使用

    1. CMake概述___CMake 保姆級(jí)教程【C_C++】

    CMake
    jf_97106930
    發(fā)布于 :2023年05月18日 15:36:53

    CMake 入門實(shí)戰(zhàn)

    CMake 入門實(shí)戰(zhàn),,
    發(fā)表于 09-28 12:38

    交叉平臺(tái)開源編譯系統(tǒng)_cmake入門

    交叉平臺(tái)開源編譯系統(tǒng)_cmake入門
    發(fā)表于 01-22 13:59 ?9次下載

    Cmake學(xué)習(xí)的總結(jié)(二)

    大家好,上次給大家分享了第一篇 cmake 文章:cmake學(xué)習(xí)總結(jié)(一),今天繼續(xù)給大家分享cmake。那么廢話就不多說,開始內(nèi)容分享。
    的頭像 發(fā)表于 12-24 17:54 ?636次閱讀

    cmake管理配置ROOT項(xiàng)目的方法

    配置文件組成。 ? 序號(hào) 文件名 文件說明 1 CMakeLists.txt? Cmake配置文件,用于組織項(xiàng)目的編譯需要的庫、編譯的過程、編譯結(jié)果 2 CMakeLists.txt.user
    的頭像 發(fā)表于 01-18 17:45 ?4611次閱讀
    <b class='flag-5'>cmake</b>管理配置ROOT項(xiàng)目的方法

    如何使用CMake工具套件構(gòu)建CUDA應(yīng)用程序

    我希望這篇文章向您展示了 CMake 如何自然地支持構(gòu)建 CUDA 應(yīng)用程序。如果您是 CMake 的現(xiàn)有用戶,請(qǐng)?jiān)囉?CMake 3 . 9 并利用改進(jìn)的 CUDA 支持。如果您不是 CMa
    的頭像 發(fā)表于 04-01 17:42 ?4544次閱讀
    如何使用<b class='flag-5'>CMake</b>工具套件構(gòu)建CUDA應(yīng)用程序

    RT-Thread V4.1.0新特性CMake介紹與構(gòu)建CMake工程

    ? ? CMake 支持 在 RT-Thread 4.1.0 正式發(fā)布版中,添加了對(duì) CMake 的支持。開發(fā)者可以使用 SCons 工具來生成 CMakeLists.txt 文件。 為何要支持
    的頭像 發(fā)表于 05-24 19:20 ?2997次閱讀

    RT-Thread 4.1.0的CMake構(gòu)建教程

    CMake 支持 在 RT-Thread 4.1.0 正式發(fā)布版中,添加了對(duì) CMake 的支持。開發(fā)者可以使用 SCons 工具來生成 CMakeLists.txt 文件。 為何要支持 CMake
    的頭像 發(fā)表于 05-25 11:06 ?3350次閱讀

    CMake用法詳解

    CMake用法詳解
    發(fā)表于 10-25 16:28 ?2次下載

    CMake實(shí)戰(zhàn)教程-2

    第一個(gè)問題,在運(yùn)行`cmake .`后會(huì)產(chǎn)生很多垃圾文件,那么我們可以讓它在一個(gè)build目錄下去編譯,生成的垃圾文件放在這個(gè)目錄下就好了,不需要的時(shí)候直接清除即可。
    的頭像 發(fā)表于 02-14 10:43 ?673次閱讀

    CMake實(shí)戰(zhàn)教程-2

    第一個(gè)問題,在運(yùn)行`cmake .`后會(huì)產(chǎn)生很多垃圾文件,那么我們可以讓它在一個(gè)build目錄下去編譯,生成的垃圾文件放在這個(gè)目錄下就好了,不需要的時(shí)候直接清除即可。
    的頭像 發(fā)表于 02-28 16:18 ?734次閱讀

    在Linux下如何使用CMake編譯程序

    CMake是開源、跨平臺(tái)的構(gòu)建工具,可以讓我們通過編寫簡單的配置文件去生成本地的Makefile,這個(gè)配置文件是獨(dú)立于運(yùn)行平臺(tái)和編譯器的,這樣就不用親自去編寫Makefile了,而且配置文件可以直接
    的頭像 發(fā)表于 11-08 16:15 ?6369次閱讀
    在Linux下如何使用<b class='flag-5'>CMake</b>編譯程序

    CMake構(gòu)建后的項(xiàng)目結(jié)構(gòu)解析

    一、 CMake構(gòu)建后的項(xiàng)目結(jié)構(gòu)解析(Analysis of the Project Structure After CMake Build) 1.1 CMake構(gòu)建后的目錄結(jié)構(gòu)(Directory
    的頭像 發(fā)表于 11-10 10:27 ?2045次閱讀
    <b class='flag-5'>CMake</b>構(gòu)建后的項(xiàng)目結(jié)構(gòu)解析
    RM新时代网站-首页