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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

說明

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

gcc和clang是兩個不同的編譯器,而make和cmake是搭配編譯器來方便用戶進行多文件編譯而發明的工具。

?

具體解釋

gcc和clang都是編譯器。

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

clang也一樣,Clang是一個C語言、C++、Objective-C、Objective-C++語言的輕量級編譯器。源代碼發布于BSD協議下。Clang將支持其普通lambda表達式、返回類型的簡化處理以及更好的處理constexpr關鍵字。

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

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

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

make工具相當于一個智能的批處理工具,本身沒有編譯和鏈接的功能,而是用類似于批處理的方式通過調用makefile文件中用戶指定的命令來進行編譯和鏈接。而makefile又是什么,就相當于用戶將要執行的一系列命令,make根據makefile中的命令對相應的源文件進行編譯和鏈接的。

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

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

$ make all $ make install # root required

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

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

下面是一個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文件是誰寫的?當然是你自己寫,但是如果你在用IDE(比如本文中的例子Clion)。那就不用擔心了,上面的一段代碼CLion為你自動生成了,好吧,這個也不用自己寫。

但是有時候IDE可能會出現某些錯誤,這個時候就需要你自己去修改相關文件了,而要修改的文件,無非也就本文中介紹的這幾種。

?

總結:

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

make:在沒使用IDE時,make工具相當于一個智能的批處理工具,本身沒有編譯和鏈接的功能,而是用類似于批處理的方式通過調用makefile文件中用戶指定的命令來進行編譯和鏈接;

makefile:相當于用戶將要執行的一系列命令,make根據makefile中的命令對相應的源文件進行編譯和鏈接;

cmake:用于更加方便地生成makefile文件給make用,cmake還有其他功能,如可以跨平臺生成對應平臺能用的makefile,無需自己根據每個平臺的不同特性去修改;

CMakeLists.txt:cmake根據CMakeLists.txt文件(組態檔)去生成makefile,CMakeLists.txt可以自己寫,寫起來比makefile容易很多;我們使用IDE時,會自動生成各種CMakeLists.txt;

?

原文鏈接:

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

?

發布于 2019-04-30

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。