能給個形象的解釋嗎,初學者沒弄懂cmake是什麼?

時間 2021-05-30 04:28:35

1樓:uuisafresh

乙個能生成makefile的指令碼語言的編譯器。

makefile是什麼或者make是什麼,是一堆命令對應的target,然後拓撲排序,逐一完成。

2樓:Seayoki

如果沒有乙個 "構建系統" (build system),乙個專案就是一團亂糟糟的檔案集合;

CMake 給 "專案檔案管理" 帶來了一些秩序 (order);

首先就是引人注目的 "人類-閱讀-友好型" 檔案 -> that 定義了 what 應該被構建 and how (怎樣被構建), what 測試 to 執行 and what packages to create;

是平台無關的, 它可以存在於任何平台上; (畢竟鮮少有平台不支援txt檔案)

乙個基礎的部分 of CMake 是特定的概念 of a project 同時有 and ;

The source dir 就是包含 CMakeList.txt 檔案的 dir , the source dir 可以在 build dir 之下; 對於 the source dir 下檔案的變動, 往往需要用 Git 做版本控制 (version control);

The binary dir 就是被 "已建立的" build 所生產的 (produced);

"build" 通常是乙個目錄, 所以 developer 常把 "build" 稱作 "build dir";

Moreover, 可執行程式 (executables), 庫 (libraries), 測試輸出 (test output) and packages 都被建立在 "build dir" 之中;

為什麼我們需要學習 CMake, 首先你可以反問自己是否喜歡在亂糟糟的桌面上辦公?

我們回到之前的那句話 ->

CMake 給 "專案檔案管理" 帶來了一些秩序 (order);

CMake brings some order to project management;

-- cut line --

你能看到的 CMake 專案的一般結構;

你能發現 build dir 在 source dir 之外, 這很重要, 這叫做 "out-of source builds"; 這樣構建目錄結構的目的是為了確保 source dir 不被 build dir 汙染, 因為你們知道 build dir 下會自動生成一些亂七八糟的檔案; 所以我更推薦選擇上圖中的目錄結構;

-- 此文未完 # 等我去幹點別的事再回來接著寫 --

3樓:Reverier

你開了一家包子鋪,打算做包子生意。(程式設計師)隨著你的客流量越來越大,你逐漸感覺有些力不從心。每次做包子都要手動活面,拌餡,千篇一律。(手動輸指令編譯鏈結)

隨著你的效率提公升了,你想在其他地方開連鎖店(不同的作業系統)。但是機器不好使了,某個地方沒有小龍蝦,只有小鳳蝦(比如Windows下面部分API在Linux中長另乙個樣),而另乙個地方沒有玉公尺棒子,但用豌豆也能獲得差不多的口感(某個庫沒有對應的平台版本,但有些替代品提供了相同的介面)。由此一來你就得根據不同的地域條件製作不同的機器(編寫不同的Makefile),才能採摘原料,做出包子成品(正確執行make指令)。

這個時候你想給機器外掛程式乙個自動控制系統,只要輸入包子配方以及各種原料在不同地方的替代品,控制系統就能自動設定好機器並開始生產。這樣,你只需要做出乙份控制系統就可以了。(cmake的用途:

根據不同平台生成對應的Makefile,然後你就可以使用make指令快速便捷的編譯生成你需要的程式)

4樓:雪凰

你是乙個工廠老闆,手下有一群工人,這些工人效率特別高,但是特別死板——你必須告訴他們圖紙都有哪些、去哪兒弄原材料、要符合什麼標準、加工的精度要求是啥樣的等等,而且每次開工之前都要告訴他們一遍。

你一想,每次開工都告訴他們一遍,太麻煩了,於是你就用紙記錄了下來——任務單。你提前寫好任務單,上面寫著你每次要告訴工人們的東西,這樣你只需要把任務單給他們,然後每次開工的時候,你只需要喊一聲「開工」,工人們就會按照任務單工作了。

後來,你憑藉著任務單技術提高了效率,開了很多廠子,可你發現乙個大問題:每個廠子地理位置差得很遠,不能從同乙個地方進貨;廠子的建築結構不一樣,放圖紙的地方不一樣……總之,你得為每個工廠寫不同的任務單。

你又一想,這也太麻煩了,於是你僱了乙個助理,你告訴他需要啥原材料,圖紙大概在哪兒之類的東西,他就會在每個廠子附近找賣原材料的地方、在每個廠子裡找有哪些圖紙……然後為每個廠子寫任務單。

從此以後,你只需要弄來圖紙,告訴你的助理一些要求,等助理工作完,你一喊「開工」,工人們就可以開工了。

上面這個故事講述了「乙個資本家一步步公升級管理方式來剝削工人的故事」(劃掉)

講述了程式設計師如何利用工具一步步提高使用編譯器的效率的故事。

工廠老闆:程式設計師

工廠及周邊:開發環境

工人:編譯器

任務單:MakeFile

喊「開工」:輸入make

助理:cmake

圖紙:原始檔

原材料:include

5樓:Chamber小飾

先說結論

CMake 是乙個構建工具,目標是生成 Make-File;Make-File 用於指導編譯器進行編譯。

舉個栗子,現在你寫了乙個 hello world 的程式,儲存為 main.cpp ,內容如下:

#include

intmain

()如果你在 windows 下使用 Visual Studio 進行開發,那麼一切都變得十分容易,因為強大的 ide 幫你做好了一切工作,你只需要建立乙個工程,寫好 main.cpp 然後 build 即可,此時你會看到乙個 .exe 檔案,它是乙個可執行檔案。

但是,假如你在 linux 環境下,現在只寫好了原始檔,你想把它轉換成對應的可執行檔案,需要怎麼做呢?你需要告訴編譯器應該編譯哪些原始檔、如何編譯。這個用於指導編譯器工作的檔案,就叫做 Make-File

當專案比較大、原始檔眾多,或者要鏈結的庫很多很複雜時,手寫 Make-File 就會變得力不從心,這時就需要乙個生成 Make-File 的工具——CMake

還是上面的例子,我們就可以為它寫乙個 CMakeLists.txt 檔案:

project(helloworld)

set(CMAKE_CXX_STANDARD 11)

add_executable(helloworld main.cpp)

CMakeLists 的編寫語法,詳見

CMake Tutorial - CMake 3.18.0-rc3 Documentation

由於 CMake 的輸出結果是一堆檔案,所以一般為它的輸出結果建立單獨乙個目錄(例如在專案目錄下建立乙個 build 目錄)。

mkdir build

然後到 build 目錄下,執行:

cd build

cmake ..

(要注意的是cmake 會尋找 CMakeLists 檔案作為它的輸入,所以執行時路徑要對)

此時可以看到 build 目錄下多出了一系列檔案,它們是 cmake 的輸出結果,其中就包括了 Make-File

接下來執行

make

可以看到 build 目錄下多了乙個 helloworld 檔案,它就是編譯好的可執行檔案。執行 ./helloworld 就可以看到熟悉的 Hello World 啦!

初學者舉槓鈴沒力氣是手臂的問題嗎需要先鍛鍊手臂嗎?

V溦 舉 手臂 槓鈴 您指的是推舉或是臥推吧?涉及這兩個動作出現運動表現問題,都不單單是手臂的問題 如果您確定好動作,確定好是某一節點的發力不順,應該可以判斷出是哪個部位的主要原因 臥推的話,從下放觸胸那一刻算起,推起的前半程主要是胸部發力,後半程到鎖定主要是三頭髮力。前後半程的界定主要跟握距有關係...

2000多的結他對於初學者合適嗎?

wkloptyq 2000多這個價位是比入門的面單琴,還要好乙個檔次,這個看你預算,我認為是完全適合初學者的。如果預算在2000以上,可以看一下山葉830,如果預算在2000以下,可以看一下聖保羅吉他GF800C,還有其實初學者1580元這個價位,也夠用了,也可以看一下聖保羅的GF500C 彈結他的...

初學者學結他想報個網課,有推薦的嗎?

平凡小億 我是零基礎自學的,貨真價實的零基礎!現在我正用著的網課,絕了。很適合我這樣的小白,從結他認知開始,一點一點講,講課也容易理解,我敢說,只要認真聽,絕對能聽懂!我現在可以彈唱了,雖然是比較簡單的伴奏,但也很不錯了。前兩天剛學會了白月光與硃砂痣的伴奏,嘿嘿 最最關鍵的是,這個課程是公開課,免費...