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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

gcc、clang、make、cmake、makefile、CMakeLists.txt概念学习

發(fā)布時(shí)間:2023/12/20 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 gcc、clang、make、cmake、makefile、CMakeLists.txt概念学习 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

說明

編譯器是翻譯代碼為計(jì)算機(jī)語言的一個(gè)工具,我們平時(shí)寫的代碼如果想在某個(gè)特定的計(jì)算機(jī)上執(zhí)行(計(jì)算機(jī)的cpu構(gòu)架不同),就需要編譯器來對(duì)代碼進(jìn)行編譯匯編鏈接,而匯編和鏈接的過程對(duì)于每個(gè)不同的平臺(tái)上過程都不一樣。

gcc和clang是兩個(gè)不同的編譯器,而make和cmake是搭配編譯器來方便用戶進(jìn)行多文件編譯而發(fā)明的工具。

?

具體解釋

gcc和clang都是編譯器。

gcc是GNU Compiler Collection,也稱為GNU編譯器套件,可以理解為編譯器,它可以編譯很多種語言:C/C++、FORTRAN、JAVA、OBJC、ADA等。假如我有一個(gè)源文件(比如.c文件),我就可以用gcc命令來編譯它。

clang也一樣,Clang是一個(gè)C語言、C++、Objective-C、Objective-C++語言的輕量級(jí)編譯器。源代碼發(fā)布于BSD協(xié)議下。Clang將支持其普通lambda表達(dá)式、返回類型的簡(jiǎn)化處理以及更好的處理constexpr關(guān)鍵字。

clang和gcc相比,比gcc編譯速度更快一些,而且錯(cuò)誤提示更人性化。

但是光有g(shù)cc和clang是不行的,如果你的源文件很多,那就需要一個(gè)一個(gè)去編譯,太麻煩工作量巨大。我們平常用的VC++、Visual Studio、Clion這種大型IDE,里面使用的編譯器就是gcc或clang。但是我們通常在使用的時(shí)候也就只需要按一個(gè)按鈕就可以實(shí)現(xiàn)對(duì)程序的編譯,這是如何進(jìn)行的呢?IDE里面已經(jīng)幫你做了你需要做的一些了。

上圖是Clion在編譯幾個(gè).c文件時(shí)候的編譯信息,我們可以看到幾個(gè)信息,Clion使用了cmake工具,以及Clion編譯C/C++使用的編譯器為AppleClang(就是適配macbook的clang編譯器)。

make工具相當(dāng)于一個(gè)智能的批處理工具,本身沒有編譯和鏈接的功能,而是用類似于批處理的方式通過調(diào)用makefile文件中用戶指定的命令來進(jìn)行編譯和鏈接。而makefile又是什么,就相當(dāng)于用戶將要執(zhí)行的一系列命令,make根據(jù)makefile中的命令對(duì)相應(yīng)的源文件進(jìn)行編譯和鏈接的

makefile中可能就有類似的一下命令:gcc -o test.c。

makefile文件在github源碼安裝程序中很常見,你下載了一個(gè)源碼包,通常在readme中會(huì)有這樣的一句:

$ make all $ make install # root required

make all即編譯所有,當(dāng)然這個(gè)源碼包中必須有makefile文件才行,執(zhí)行make all這個(gè)命令后make會(huì)根據(jù)makefile中的命令進(jìn)行編譯。當(dāng)然這個(gè)是“別人家”的源碼包,這個(gè)通常都給你寫好了,但是如果你自己要編譯很多源文件的時(shí)候,也是要自己寫嗎?

當(dāng)然不,還是比較麻煩,所以我們需要cmake工具,這樣就可以更加方便地生成makefile文件給make用。cmake還有其他功能,就是可以跨平臺(tái)生成對(duì)應(yīng)平臺(tái)能用的makefile,無需自己根據(jù)每個(gè)平臺(tái)的不同特性去修改。而cmake根據(jù)什么生成makefile,它需要根據(jù)CMakeLists.txt文件(組態(tài)檔)去生成makefile

下面是一個(gè)CMakeLists.txt文件:

cmake_minimum_required(VERSION 3.8) project(First_Code) set(CMAKE_CXX_STANDARD 11) #set(CMAKE_CXX_FLAGS "-std=c++0x ${CMAKE_CXX_FLAGS} -g -ftest-coverage -fprofile-arcs") #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") set(SOURCE_FILES main.cpp test.cpp assignment.cpp) add_executable(First_Code ${SOURCE_FILES})

CMakeLists.txt文件是誰寫的?當(dāng)然是你自己寫,但是如果你在用IDE(比如本文中的例子Clion)。那就不用擔(dān)心了,上面的一段代碼CLion為你自動(dòng)生成了,好吧,這個(gè)也不用自己寫。

但是有時(shí)候IDE可能會(huì)出現(xiàn)某些錯(cuò)誤,這個(gè)時(shí)候就需要你自己去修改相關(guān)文件了,而要修改的文件,無非也就本文中介紹的這幾種。

?

總結(jié):

gcc、clang:兩個(gè)編譯器,用于將程序員的編程語言,編譯匯編鏈接成機(jī)器語言;

make:在沒使用IDE時(shí),make工具相當(dāng)于一個(gè)智能的批處理工具,本身沒有編譯和鏈接的功能,而是用類似于批處理的方式通過調(diào)用makefile文件中用戶指定的命令來進(jìn)行編譯和鏈接;

makefile:相當(dāng)于用戶將要執(zhí)行的一系列命令,make根據(jù)makefile中的命令對(duì)相應(yīng)的源文件進(jìn)行編譯和鏈接;

cmake:用于更加方便地生成makefile文件給make用,cmake還有其他功能,如可以跨平臺(tái)生成對(duì)應(yīng)平臺(tái)能用的makefile,無需自己根據(jù)每個(gè)平臺(tái)的不同特性去修改;

CMakeLists.txt:cmake根據(jù)CMakeLists.txt文件(組態(tài)檔)去生成makefile,CMakeLists.txt可以自己寫,寫起來比makefile容易很多;我們使用IDE時(shí),會(huì)自動(dòng)生成各種CMakeLists.txt;

?

原文鏈接:

編譯器gcc、clang、make、cmake辨析 - Oldpan的個(gè)人博客?oldpan.me

?

發(fā)布于 2019-04-30

總結(jié)

以上是生活随笔為你收集整理的gcc、clang、make、cmake、makefile、CMakeLists.txt概念学习的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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