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

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

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

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

技術(shù)讓夢(mèng)想更偉大 ? 來源:技術(shù)讓夢(mèng)想更偉大 ? 作者:技術(shù)讓夢(mèng)想更偉大 ? 2023-07-18 10:53 ? 次閱讀

一、cmake是什么?

CMake是一個(gè)開源、跨平臺(tái)的工具系列,是用來構(gòu)建、測(cè)試和打包軟件。

CMake使用平臺(tái)無關(guān)的配置文件來控制軟件編譯過程,并生成可在您選擇的編譯器環(huán)境中使用項(xiàng)目文件,比如可以生成vs項(xiàng)目文件或者makefile。CMake工具套件由Kitware公司創(chuàng)建,以滿足ITK和VTK等開源項(xiàng)目對(duì)跨平臺(tái)構(gòu)建環(huán)境的需求。Kitware是一家從事醫(yī)療計(jì)算,高性能的可視化和計(jì)算,數(shù)據(jù)和分析,計(jì)算機(jī)視覺的公司。該公司成立于1998年。

二、為什么現(xiàn)在都在用cmake?

1 為什么用cmake,這里有兩個(gè)問題,首先要問為什么我需要一個(gè)好的構(gòu)建系統(tǒng)?,下面是主要的原因:

· 你想避免硬編碼路徑

· 您需要在多臺(tái)計(jì)算機(jī)上構(gòu)建一個(gè)包

· 你想使用 CI(持續(xù)集成)

· 你需要支持不同的操作系統(tǒng)

· 你想支持多個(gè)編譯器

· 您想使用 IDE,但不是所有情況

· 你想描述你的程序的邏輯結(jié)構(gòu),而不是標(biāo)志和命令

· 你想使用庫

· 您想使用其他工具來幫助您編寫代碼 moc ProtoBuf

· 你想使用單元測(cè)試

2 這里有個(gè)重要的需求,就是持續(xù)集成,下面我們來說明一下什么是持續(xù)集成,

· 每次集成都通過自動(dòng)化的制造(包括提交、發(fā)布、自動(dòng)化測(cè)試)來驗(yàn)證,準(zhǔn)確地發(fā)現(xiàn)集成錯(cuò)誤。

· 快速錯(cuò)誤,每完成一點(diǎn)更新,就集成到主干,可以快速發(fā)現(xiàn)錯(cuò)誤,定位錯(cuò)誤也比較容易

· 各種不同的更新主干,如果不經(jīng)常集成,會(huì)導(dǎo)致集成的成本變大

· 讓產(chǎn)品可以快速地通過,同時(shí)保持關(guān)鍵測(cè)試合格

· 自動(dòng)化測(cè)試,只要有一個(gè)測(cè)試用例不通過就不能集成

· 集成并不能刪除發(fā)現(xiàn)的錯(cuò)誤,而是讓它們很容易發(fā)現(xiàn)和改正

3 那又為什么是cmake?下面我們看下cmake的特性就知道為什么要選擇它了:

cmake特性

· 自動(dòng)搜索可能需要的程序、庫和頭文件的能力

· 獨(dú)立的構(gòu)建目錄,可以安全清理

· 創(chuàng)建復(fù)雜的自定義命令,例如qt moc uic

· 配置時(shí)選擇可選組件的能力

· 從簡(jiǎn)單的文本文件(CMakeLists.txt)自動(dòng)生成工作區(qū)和項(xiàng)目的能力

· 在靜態(tài)和共享構(gòu)建之間輕松切換的能力

· 在大多數(shù)平臺(tái)上自動(dòng)生成文件依賴項(xiàng)并支持并行構(gòu)建

下面再說兩個(gè)現(xiàn)實(shí)場(chǎng)景的原因:

· 幾乎每個(gè) IDE 都支持 CMake( CMake 支持幾乎所有IDE)

· 使用 CMake 的軟件包比任何其他構(gòu)建系統(tǒng)都多

三、cmake編譯原理(cmake工作原理

wKgaomS1_uKAYaD7AAKvjj4XxGc165.png

上面是我畫的cmake原理流程圖,有些復(fù)雜但基本描述了cmake的工作原理,更多內(nèi)容可以看下cmake的官方手冊(cè) cmake.org.cn

四、cmake編譯(Linux Windows MacOS系統(tǒng)建構(gòu)示例)

1 環(huán)境準(zhǔn)備

參考我的上一篇文章

《cmake使用方法詳解 - Windows Linux MacOS cmake安裝教程

2 源碼準(zhǔn)備

源碼準(zhǔn)備,三個(gè)平臺(tái)使用同一份c++源碼和cmake配置

· c++源碼

//first_cmake.cpp 
#include  using namespace std; 
int main(int argc,char *argv[])
{
  cout<<"first cmake c++"<
? · CMake配置源碼 CMakeLists.txt


 · cmake_minimum_required 指定最低的cmake版本


 · project 項(xiàng)目名稱,后面可以通過變量獲取此名稱
# CMakeLists.txt 
cmake_minimum_required (VERSION 3.0)
project (first_cmake)
add_executable(first_cmake first_cmake.cpp)
·目錄結(jié)構(gòu)

CMakeLists.txt文件在根目錄 ,c++源碼first_cmake.cpp和其同一個(gè)目錄。

wKgZomS1_0-AEUwrAACwU7kZcDI317.png

2 Windows平臺(tái)編譯

CMake=》vs項(xiàng)目=》cl編譯

1 源碼目錄下面創(chuàng)建一個(gè)編譯目錄build,用于生成cmake的臨時(shí)文件和項(xiàng)目文件,放在獨(dú)立的目錄方便清理和查看。

wKgaomS1_0-AUMJeAACwsk2nTTc106.png

2 進(jìn)入編譯目錄build,直接運(yùn)行cmake .. 使用默認(rèn)生成項(xiàng)目文件,下圖生成的是vs2022的64位項(xiàng)目(文件所在的路徑和目錄層次不能太深,太深會(huì)找不到編譯器)。

wKgZomS1_0-AUV-fAAEiVMigunk865.png

wKgZomS1_0-ABnk_AAL6xZqJqjI640.png

3 編譯項(xiàng)目

有兩種編譯方法,第一種直接進(jìn)入build目錄打開vs解決方案進(jìn)行編譯.第二種,控制臺(tái)進(jìn)入生成的項(xiàng)目文件路徑 build,然后運(yùn)行 cmake --build . 后面的點(diǎn)表示當(dāng)前路徑。

wKgaomS1_xCABf_9AACN_UFsxYs367.png

3 Linux平臺(tái)編譯

1 安裝好gcc編譯工具

sudo apt install g++

sudo apt install make

CMake=》makefile=》make使用gcc或者clang編譯

可以手動(dòng)創(chuàng)建build路徑,然后與上面的windows編譯方法一致。

還有一種方法

1 在CMakeLists.txt文件所在路徑,運(yùn)行

cmake -S . -B build

-S 后面是指定CMakeLists.txt文件的路徑,-B后面是生成的編譯臨時(shí)目錄路徑。

使用默認(rèn)生成項(xiàng)目文件,下圖生成的是makefile + gcc (linux下 c++ 指向g++ ,cc指向gcc)

wKgZomS1_xCAErXiAAEtbE2-EEQ043.png

2 編譯項(xiàng)目

編譯項(xiàng)目也有兩種方法,

一種是直接使用生成的makefile文件

進(jìn)入build目錄輸入 make 編譯項(xiàng)目。

另一種是與windows編譯方法一致,在項(xiàng)目根路徑可以輸入

cmake --build build

后面的build是cmake生成的文件所在路徑

4 Mac平臺(tái)編譯

MacOS下的編譯,基本與linux下一致,當(dāng)然也可以選擇生成為xcode的工程項(xiàng)目:

wKgZomS1_xCAUY57AAOWFv4IGHI759.png

sudo xcode-select --switch /Applications/Xcode.app/

wKgaomS1_xCActHbAAE7I1R0qaA614.png

cmake .. -G "Xcode"

cmake --build .

wKgaomS1_xCAJxORAAM2chMwVhQ688.png

wKgaomS1_xCAbDoKAAF6NqbvwGU375.pngwKgZomS1_xCAaUn-AAItvkhGxv8288.png

審核編輯:湯梓紅

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

    關(guān)注

    19

    文章

    7168

    瀏覽量

    87147
  • 軟件
    +關(guān)注

    關(guān)注

    69

    文章

    4570

    瀏覽量

    86695
  • 開源
    +關(guān)注

    關(guān)注

    3

    文章

    3125

    瀏覽量

    42068
  • 編譯
    +關(guān)注

    關(guān)注

    0

    文章

    646

    瀏覽量

    32664
  • CMake
    +關(guān)注

    關(guān)注

    0

    文章

    28

    瀏覽量

    1244

原文標(biāo)題:超火的cmake是什么?

文章出處:【微信號(hào):技術(shù)讓夢(mèng)想更偉大,微信公眾號(hào):技術(shù)讓夢(mèng)想更偉大】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    跨平臺(tái)編譯工具cmake的簡(jiǎn)單使用

    在使用不同平臺(tái)的電腦時(shí),使用的編譯也會(huì)不一樣,如果想把一個(gè)項(xiàng)目在不同平臺(tái)下編譯,那有什么方式可以實(shí)現(xiàn)這樣的需求呢,這就是這篇文章就來介紹其中的一種方式,就是使用cmakecmake
    發(fā)表于 08-14 10:40 ?926次閱讀
    跨平臺(tái)<b class='flag-5'>編譯</b>工具<b class='flag-5'>cmake</b>的簡(jiǎn)單使用

    Windows下編譯工具CMake的安裝和最簡(jiǎn)使用

    (Autosar工程已經(jīng)很復(fù)雜,一般使用CMake來構(gòu)建工程)。本文將介紹Windows下編譯工具CMake的安裝和最簡(jiǎn)使用。
    的頭像 發(fā)表于 11-14 10:18 ?6104次閱讀
    Windows下<b class='flag-5'>編譯</b>工具<b class='flag-5'>CMake</b>的安裝和最簡(jiǎn)使用

    Linux下如何使用CMake編譯程序

    今天分享一篇關(guān)于 cmake 的相關(guān)文章,通過這個(gè)工具可以生成本地的Makefile。讓我們不用去編寫復(fù)雜的Makefile。
    的頭像 發(fā)表于 11-21 09:28 ?1219次閱讀
    Linux下如何使用<b class='flag-5'>CMake</b><b class='flag-5'>編譯</b>程序

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

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

    CMake安裝編譯工具應(yīng)用程序免費(fèi)下載

    CMake是一個(gè)跨平臺(tái)的安裝(編譯)工具,可以用簡(jiǎn)單的語句來描述所有平臺(tái)的安裝(編譯過程)。他能夠輸出各種各樣的makefile或者project文件,能測(cè)試
    發(fā)表于 08-07 08:00 ?2次下載
    <b class='flag-5'>CMake</b>安裝<b class='flag-5'>編譯</b>工具應(yīng)用程序免費(fèi)下載

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

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

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

    配置文件組成。 ? 序號(hào) 文件名 文件說明 1 CMakeLists.txt? Cmake配置文件,用于組織項(xiàng)目的編譯需要的庫、編譯過程編譯
    的頭像 發(fā)表于 01-18 17:45 ?4390次閱讀
    <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 ?4263次閱讀
    如何使用<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 ?2809次閱讀

    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 ?3139次閱讀

    CMake用法詳解

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

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

    CMake 是一個(gè)跨平臺(tái)的構(gòu)建系統(tǒng)生成工具。它使用平臺(tái)無關(guān)的 CMake 清單文件CMakeLists.txt,指定工程的構(gòu)建過程;源碼樹的每個(gè)路徑下都有這個(gè)文件。CMake 產(chǎn)生一個(gè)
    的頭像 發(fā)表于 02-14 10:42 ?646次閱讀
    <b class='flag-5'>CMake</b>的實(shí)戰(zhàn)教程-1

    跨平臺(tái)編譯工具CMake語法詳解

    cmake 是一個(gè)跨平臺(tái)、開源的構(gòu)建系統(tǒng)。它是一個(gè)集軟件構(gòu)建、測(cè)試、打包于一身的軟件。
    的頭像 發(fā)表于 03-08 15:54 ?1105次閱讀

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

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

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

    地。下面我們將詳細(xì)解析這個(gè)目錄的結(jié)構(gòu)。 首先,我們來看一下build目錄的一級(jí)子目錄: CMakeFiles:這個(gè)目錄中存放的是CMake在構(gòu)建過程中生成的臨時(shí)文件,包括編譯器檢查的結(jié)果、Find模塊
    的頭像 發(fā)表于 11-10 10:27 ?1448次閱讀
    <b class='flag-5'>CMake</b>構(gòu)建后的項(xiàng)目結(jié)構(gòu)解析