日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言项目为什么要build?(gcc、makefile、cmake(qmake)、CMakeLists.txt)(qmake、cmake、qbs区别解析)(qmake还是cmake,mingw作用)

發(fā)布時間:2025/3/20 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言项目为什么要build?(gcc、makefile、cmake(qmake)、CMakeLists.txt)(qmake、cmake、qbs区别解析)(qmake还是cmake,mingw作用) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

搞不太懂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就行了

1、Qbs簡介https://doc.qt.io/qbs/qml-qbsmodules-qbs.htmlhttps://blog.csdn.net/qq_34139994/article/details/98478648QBS(Qt Build Suite)同 qmake、cmake 之類一樣都是構(gòu)建工具。 QBS 號稱是新一代的構(gòu)建工具,比qmake編譯速度更快。和qmake不一樣,qbs沒有綁定Qt版本,它從項目文件的高級項目描述中生成一個正確的編譯表(依賴表)。 而傳統(tǒng)的MakeFile生成工具比如qmake和CMake生成了makefile文件,然后將實際的命令留給make或者ninja這樣的工具去執(zhí)行。 Qbs的另一方面就是充當(dāng)了并行生成與直接調(diào)用編譯器、連接器以及其他工具的角色,非常像SCons和Ant做的事情。2、Qt官方聲明:因市場原因,棄用Qbshttps://www.qt.io/blog/2018/10/29/deprecation-of-qbsQt公司一直在為Qt程序支持三種不同的構(gòu)建系統(tǒng)。對于Qt用戶,qmake是當(dāng)前使用最廣泛的構(gòu)建系統(tǒng)。 CMake是第二名,并且越來越受歡迎。第三名是Qbs,采用率明顯降低。 當(dāng)被問及他們的喜好時,我們的大多數(shù)客戶都說他們計劃將來使用CMake或qmake。我們已決定棄用Qbs,并重定向資源以增加對CMake的支持。 Qbs將與Qt Creator 4.9一起一直支持到2019年底,最后計劃于20194月發(fā)布。 Qbs既可以通過商業(yè)許可也可以通過開源許可獲得,我們很高興繼續(xù)為Qt Project社區(qū)提供進(jìn)一步開發(fā)的基礎(chǔ)設(shè)施。總結(jié)要點(diǎn):Qbs將繼續(xù)得到支持,直到2019年底 最新的Qbs版本將于20194月發(fā)布 Qbs繼續(xù)與即將推出的Qt Creator 4.8和Qt Creator 4.9一起使用 Qt項目下將提供Qbs庫和工具,以供社區(qū)進(jìn)一步開發(fā) 對qmake的支持將繼續(xù)不受影響 對CMake的支持將得到改善 從長遠(yuǎn)來看,我們計劃切換到CMake來構(gòu)建Qt本身 Qt Creator中的CMake支持將得到進(jìn)一步改善 棄用Qbs使我們能夠顯著改善CMake支持。我們相信這一變化將幫助越來越多的客戶喜歡使用CMake構(gòu)建系統(tǒng)。 CMake在Qt以外的廣泛采用以及其積極的開發(fā)生態(tài)系統(tǒng)也是有益的。3、Qt6將重點(diǎn)支持CMakecmake的優(yōu)點(diǎn)是在C ++生態(tài)系統(tǒng)中使用非常廣泛(KDE以及其他許多應(yīng)用程序一樣), 在許多IDE和其他工具(例如VCPkg,Conan等)中都有非常廣泛的支持, 并且知識很多關(guān)于生態(tài)系統(tǒng)中可用的構(gòu)建系統(tǒng)。 將其與Qt 6一起使用還意味著我們可以將支持重點(diǎn)放在針對用戶的兩個構(gòu)建系統(tǒng)(qmake和cmake)上,而不必在組合中添加第三個。從長遠(yuǎn)來看,我們想逐步淘汰qmake來構(gòu)建Qt本身,而改用CMake。 即使在此之后,qmake仍可用于構(gòu)建應(yīng)用程序。 我們當(dāng)然會繼續(xù)提供預(yù)編譯的二進(jìn)制文件,這是大多數(shù)Qt用戶所喜歡的。4、結(jié)論(1)Qbs被官方廢棄(2)Qt6使用qmake和cmake構(gòu)建(3)Qt未來用cmake取代qmake位置-----推薦一款強(qiáng)大的C++ IDE,使用CMake構(gòu)建項目https://www.jetbrains.com/clion/

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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。