c语言项目为什么要build?(gcc、makefile、cmake(qmake)、CMakeLists.txt)(qmake、cmake、qbs区别解析)(qmake还是cmake,mingw作用)
搞不太懂gcc和cmake(qmake)等的區(qū)別
1.gcc是GNU Compiler Collection(就是GNU編譯器套件),也可以簡單認(rèn)為是編譯器, 它可以編譯很多種編程語言(括C、C++、Objective-C、Fortran、Java等等)。2.當(dāng)你的程序只有一個源文件時,直接就可以用gcc命令編譯它。3.但是當(dāng)你的程序包含很多個源文件時,用gcc命令逐個去編譯時,你就很容易混亂而且工作量大4.所以出現(xiàn)了make工具make工具可以看成是一個智能的批處理工具,它本身并沒有編譯和鏈接的功能, 而是用類似于批處理的方式—通過調(diào)用makefile文件中用戶指定的命令來進(jìn)行編譯和鏈接的。5.makefile是什么?簡單的說就像一首歌的樂譜,make工具就像指揮家,指揮家根據(jù)樂譜指揮整個樂團(tuán)怎么樣演奏, make工具就根據(jù)makefile中的命令進(jìn)行編譯和鏈接的。6.makefile命令中就包含了調(diào)用gcc(也可以是別的編譯器)去編譯某個源文件的命令。7.makefile在一些簡單的工程完全可以人工手下,但是當(dāng)工程非常大的時候, 手寫makefile也是非常麻煩的,如果換了個平臺makefile又要重新修改。8.這時候就出現(xiàn)了Cmake這個工具,cmake就可以更加簡單的生成makefile文件給上面那個make用。 當(dāng)然cmake還有其他功能,就是可以跨平臺生成對應(yīng)平臺能用的makefile,你不用再自己去修改了。9.可是cmake根據(jù)什么生成makefile呢?它又要根據(jù)一個叫CMakeLists.txt文件(學(xué)名:組態(tài)檔)去生成makefile。10.到最后CMakeLists.txt文件誰寫啊?親,是你自己手寫的。11.當(dāng)然如果你用IDE,類似VS這些一般它都能幫你弄好了,你只需要按一下那個三角形參考文章:GCC 和 cmake的關(guān)系? - 輝常哥的回答 - 知乎
gcc是編譯器,其實后還有連接器等make是另外一個程序,根據(jù)makefile的指示, 盡可能協(xié)調(diào)編一個程序套件的編譯全過程,一個程序套件可能包好多多源代碼, 也可能生成若干二進(jìn)制文件,還可能指示程序套件的安裝程序制作和/或安裝過程, 那make就通過調(diào)用編譯器連接器還有其他外部工具達(dá)成這一系列工作。 make不光可以調(diào)用gcc編譯器,也可以調(diào)用javac啊。makefile精力集中于定義工作流水線。CMake 是另外一個更高層一點(diǎn)的工具,它的輸出是makefile等。 支持使用更簡單的語言描述編譯安裝過程。支持多個makefile系列、VisualStudio等推薦使用場景: 1 gcc編譯器套件:最簡單啦,單文件工程比如helloworld直接使用就行了 2 make&makefile : 小中大型工程肯定要用的啦,大型工程的makefile系統(tǒng)不少也都是噩夢般的存在。 適用于工具鏈【較為統(tǒng)一】的工程中,有一定跨平臺能力。 3 CMake:若需要更為廣泛的支持多編譯工具鏈更廣地跨平臺且還不想構(gòu)建復(fù)雜的跨平臺makefile系統(tǒng), 那CMake確實是個很好的選擇,由CMake來先編譯出不同平臺的makefile工程, 而CMakeLists.txt集中聲明描述下工程組件的關(guān)系即可。參考文章:GCC 和 cmake的關(guān)系? - 任衛(wèi)的回答 - 知乎
總而言之:
cmake是用來build項目的,
gcc是小打小鬧,適用于單文件編譯(不做后面鏈接,匯編做不做不知道)
makefile先不管它,估計是cmake的祖先
另外,在 qt creator 新建項目選擇 build 工具時,會讓你選擇:
以下是關(guān)于qmake、cmake、qbs的講解,引用自:淺談Qt的編譯方式:qmake/cmake/qbs及qbs被棄用的原因,一般我們就選擇cmake就行了
20211025 應(yīng)該選擇qmake還是cmake
qt – CMake和qmake有什么區(qū)別和相似之處?(應(yīng)該選擇qmake還是cmake)
我想知道使用CMake作為特定項目超過qmake的原因,反之亦然. 簡單的兩個構(gòu)建系統(tǒng)的利弊是什么?我搜索并發(fā)現(xiàn)很少的文件,但是覺得很難理解.兩者都是構(gòu)建系統(tǒng),但它們根本不是很相似.如果您的項目使用Qt,您可能最好使用qmake. CMake更通用,幾乎適合任何類型的項目. qmake和CMake都會生成一個Makefile,這是由make讀取的,用于構(gòu)建項目.并不是所有的構(gòu)建系統(tǒng)都生成一個Makefile,但是很多都可以.即使一個Makefile也是一種構(gòu)建系統(tǒng);它告訴編譯器和鏈接器要做什么,以創(chuàng)建可執(zhí)行文件(或動態(tài)或靜態(tài)庫).如果您的項目使用Qt,但是您不想使用qmake,您將不得不自己做一些更多的事情:>運(yùn)行Meta Object Compiler(MOC) >包含路徑(告訴編譯器在哪里查找Qt頭文件) >鏈接(告訴鏈接器在哪里查找Qt庫)所以,你必須做更多的工作來構(gòu)建沒有qmake的Qt項目,但它是可能的,它會教你如何Qt和qmake做的事情很多.在個人筆記(僅作為推薦,做自己進(jìn)一步研究):我不是qmake的大粉絲.它可以幫助你的Qt東西,但除此之外,我發(fā)現(xiàn)它是非常有限的.無論如何,我建議學(xué)習(xí)構(gòu)建一個小型項目(?10個源文件),而不使用任何類型的構(gòu)建系統(tǒng).不使用CMake,而不是使用Makefile,直接使用編譯器和鏈接器.您不應(yīng)該以這種方式實際構(gòu)建任何真正的項目,但您應(yīng)該學(xué)習(xí)如何做,只是為了了解構(gòu)建系統(tǒng)實際做什么.知道他們做什么會使他們更容易使用.幾個月前,我們將項目從qmake切換到Premake,這也值得一看.它具有高度的腳本性(Lua),當(dāng)您需要自定義構(gòu)建過程時,這是非常好的.也就是說,這是一個更多的“手動”,所以準(zhǔn)備自己學(xué)習(xí)如何編譯和鏈接工作在一個更基礎(chǔ)的水平,而不使用構(gòu)建系統(tǒng).它也是測試版(Premake 5),所以還有一些缺點(diǎn).你也可以看看qbs,這應(yīng)該是一個更好的qmake.它仍然處于測試階段,所以我會等待成熟并變得更容易使用.20211025 qmake和mingw32區(qū)別
qmake是Qt提供的編譯工具,他可以生成與平臺無關(guān)的.pro文件,然后利用該文件生成與平臺相關(guān)的makefile文件。然后使用mingw32-make生成可執(zhí)行程序
參考文章:Qt qmake和mingw32-make
qmake是構(gòu)建工具,mingw32是編譯器套件(kit)
1、從目標(biāo)上說:
MinGW 是讓W(xué)indows 用戶可以用上GNU 工具,比如GCC。
Cygwin 提供完整的類Unix 環(huán)境,Windows 用戶不僅可以使用GNU 工具,理論上Linux 上的程序只要用Cygwin 重新編譯,就可以在Windows 上運(yùn)行。
2、從能力上說:
如果程序只用到C/C++ 標(biāo)準(zhǔn)庫,可以用MinGW 或Cygwin 編譯。
如果程序還用到了POSIX API,則只能用Cygwin 編譯。
3、從依賴上說:
程序經(jīng)MinGW 編譯后可以直接在Windows 上面運(yùn)行。
程序經(jīng)Cygwin 編譯后運(yùn)行,需要依賴安裝時附帶的cygwin1.dll。
參考文章:Cygwin 和MinGW 的區(qū)別與聯(lián)系是怎樣的?
總結(jié)
以上是生活随笔為你收集整理的c语言项目为什么要build?(gcc、makefile、cmake(qmake)、CMakeLists.txt)(qmake、cmake、qbs区别解析)(qmake还是cmake,mingw作用)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: windows怎么用qt MinGW g
- 下一篇: visual studio解决方案是什么