在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

技術讓夢想更偉大 ? 來源:技術讓夢想更偉大 ? 作者:技術讓夢想更偉大 ? 2023-07-18 10:53 ? 次閱讀

一、cmake是什么?

CMake是一個開源、跨平臺的工具系列,是用來構建、測試和打包軟件。

CMake使用平臺無關的配置文件來控制軟件編譯過程,并生成可在您選擇的編譯器環境中使用項目文件,比如可以生成vs項目文件或者makefile。CMake工具套件由Kitware公司創建,以滿足ITK和VTK等開源項目對跨平臺構建環境的需求。Kitware是一家從事醫療計算,高性能的可視化和計算,數據和分析,計算機視覺的公司。該公司成立于1998年。

二、為什么現在都在用cmake?

1 為什么用cmake,這里有兩個問題,首先要問為什么我需要一個好的構建系統?,下面是主要的原因:

· 你想避免硬編碼路徑

· 您需要在多臺計算機上構建一個包

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

· 你需要支持不同的操作系統

· 你想支持多個編譯器

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

· 你想描述你的程序的邏輯結構,而不是標志和命令

· 你想使用庫

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

· 你想使用單元測試

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

· 每次集成都通過自動化的制造(包括提交、發布、自動化測試)來驗證,準確地發現集成錯誤。

· 快速錯誤,每完成一點更新,就集成到主干,可以快速發現錯誤,定位錯誤也比較容易

· 各種不同的更新主干,如果不經常集成,會導致集成的成本變大

· 讓產品可以快速地通過,同時保持關鍵測試合格

· 自動化測試,只要有一個測試用例不通過就不能集成

· 集成并不能刪除發現的錯誤,而是讓它們很容易發現和改正

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

cmake特性

· 自動搜索可能需要的程序、庫和頭文件的能力

· 獨立的構建目錄,可以安全清理

· 創建復雜的自定義命令,例如qt moc uic

· 配置時選擇可選組件的能力

· 從簡單的文本文件(CMakeLists.txt)自動生成工作區和項目的能力

· 在靜態和共享構建之間輕松切換的能力

· 在大多數平臺上自動生成文件依賴項并支持并行構建

下面再說兩個現實場景的原因:

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

· 使用 CMake 的軟件包比任何其他構建系統都多

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

wKgaomS1_uKAYaD7AAKvjj4XxGc165.png

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

四、cmake編譯(Linux Windows MacOS系統建構示例)

1 環境準備

參考我的上一篇文章

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

2 源碼準備

源碼準備,三個平臺使用同一份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 項目名稱,后面可以通過變量獲取此名稱
# CMakeLists.txt 
cmake_minimum_required (VERSION 3.0)
project (first_cmake)
add_executable(first_cmake first_cmake.cpp)
·目錄結構

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

wKgZomS1_0-AEUwrAACwU7kZcDI317.png

2 Windows平臺編譯

CMake=》vs項目=》cl編譯

1 源碼目錄下面創建一個編譯目錄build,用于生成cmake的臨時文件和項目文件,放在獨立的目錄方便清理和查看。

wKgaomS1_0-AUMJeAACwsk2nTTc106.png

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

wKgZomS1_0-AUV-fAAEiVMigunk865.png

wKgZomS1_0-ABnk_AAL6xZqJqjI640.png

3 編譯項目

有兩種編譯方法,第一種直接進入build目錄打開vs解決方案進行編譯.第二種,控制臺進入生成的項目文件路徑 build,然后運行 cmake --build . 后面的點表示當前路徑。

wKgaomS1_xCABf_9AACN_UFsxYs367.png

3 Linux平臺編譯

1 安裝好gcc編譯工具

sudo apt install g++

sudo apt install make

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

可以手動創建build路徑,然后與上面的windows編譯方法一致。

還有一種方法

1 在CMakeLists.txt文件所在路徑,運行

cmake -S . -B build

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

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

wKgZomS1_xCAErXiAAEtbE2-EEQ043.png

2 編譯項目

編譯項目也有兩種方法,

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

進入build目錄輸入 make 編譯項目。

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

cmake --build build

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

4 Mac平臺編譯

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

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

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 計算機
    +關注

    關注

    19

    文章

    7614

    瀏覽量

    89914
  • 軟件
    +關注

    關注

    69

    文章

    5097

    瀏覽量

    88805
  • 開源
    +關注

    關注

    3

    文章

    3542

    瀏覽量

    43328
  • 編譯
    +關注

    關注

    0

    文章

    674

    瀏覽量

    33641
  • CMake
    +關注

    關注

    0

    文章

    28

    瀏覽量

    1409

原文標題:超火的cmake是什么?

文章出處:【微信號:技術讓夢想更偉大,微信公眾號:技術讓夢想更偉大】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    跨平臺編譯工具cmake的簡單使用

    在使用不同平臺的電腦時,使用的編譯也會不一樣,如果想把一個項目在不同平臺下編譯,那有什么方式可以實現這樣的需求呢,這就是這篇文章就來介紹其中的一種方式,就是使用cmakecmake
    發表于 08-14 10:40 ?1648次閱讀
    跨平臺<b class='flag-5'>編譯</b>工具<b class='flag-5'>cmake</b>的簡單使用

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

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

    Linux下如何使用CMake編譯程序

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

    交叉平臺開源編譯系統_cmake入門

    交叉平臺開源編譯系統_cmake入門
    發表于 01-22 13:59 ?9次下載

    CMake安裝編譯工具應用程序免費下載

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

    Cmake學習的總結(二)

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

    cmake管理配置ROOT項目的方法

    配置文件組成。 ? 序號 文件名 文件說明 1 CMakeLists.txt? Cmake配置文件,用于組織項目的編譯需要的庫、編譯過程編譯
    的頭像 發表于 01-18 17:45 ?4910次閱讀
    <b class='flag-5'>cmake</b>管理配置ROOT項目的方法

    如何使用CMake工具套件構建CUDA應用程序

    我希望這篇文章向您展示了 CMake 如何自然地支持構建 CUDA 應用程序。如果您是 CMake 的現有用戶,請試用 CMake 3 . 9 并利用改進的 CUDA 支持。如果您不是 CMa
    的頭像 發表于 04-01 17:42 ?4864次閱讀
    如何使用<b class='flag-5'>CMake</b>工具套件構建CUDA應用程序

    RT-Thread V4.1.0新特性CMake介紹與構建CMake工程

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

    RT-Thread 4.1.0的CMake構建教程

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

    CMake用法詳解

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

    CMake的實戰教程-1

    CMake 是一個跨平臺的構建系統生成工具。它使用平臺無關的 CMake 清單文件CMakeLists.txt,指定工程的構建過程;源碼樹的每個路徑下都有這個文件。CMake 產生一個
    的頭像 發表于 02-14 10:42 ?852次閱讀
    <b class='flag-5'>CMake</b>的實戰教程-1

    跨平臺編譯工具CMake語法詳解

    cmake 是一個跨平臺、開源的構建系統。它是一個集軟件構建、測試、打包于一身的軟件。
    的頭像 發表于 03-08 15:54 ?1773次閱讀

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

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

    CMake構建后的項目結構解析

    地。下面我們將詳細解析這個目錄的結構。 首先,我們來看一下build目錄的一級子目錄: CMakeFiles:這個目錄中存放的是CMake在構建過程中生成的臨時文件,包括編譯器檢查的結果、Find模塊
    的頭像 發表于 11-10 10:27 ?2528次閱讀
    <b class='flag-5'>CMake</b>構建后的項目結構解析
    主站蜘蛛池模板: 国产精品青草久久久久福利99 | 国产成人精品亚洲77美色 | 久久久久久久综合 | 国产黄页| h视频在线免费 | aaaaa级毛片免费视频 | 99久久精品费精品国产一区二区 | 天天操天天爱天天干 | 最新国产厕所 | 亚洲天堂导航 | 天天摸天天操免费播放小视频 | 欧美色图综合 | 性色视频在线观看 | 精品福利视频网站 | 女人张腿让男桶免费视频观看 | 久久久久久久久久免免费精品 | 免费观看在线观看 | 天天噜日日噜夜夜噜 | 国产欧美一级片 | 三浦理惠子中文在 | 三级网站在线看 | 国产精品vv在线 | 婷婷亚洲综合五月天在线 | japanese日本护士xx亚洲 | 色婷婷影视 | 免费被视频网站在线观看 | 黄色日比 | 91久久另类重口变态 | 色播影院性播影院私人影院 | 嘿嘿嘿视频在线观看 | 4388x17亚洲最大成人网 | 欧美大尺度aaa级毛片 | 美女牲交毛片一级视频 | 中文字幕国产一区 | 天天看天天做 | 国产1区2区三区不卡 | 五月天久久婷婷 | 日操夜操天天操 | 午夜精品久久久久久91 | 三级毛片免费观看 | 国产精品免费久久久久影院 |