【C++】【編譯器】C語言編譯器的那些事

GNU和Linux

Linux相信大家都不陌生,它是一個開源操作系統,但是在早期,它指的僅僅是操作系統內核,由於操作系統內核叫做Linux,慢慢人們也習慣把這個操作系統叫做Linux系統了

GNU是一個自由軟件計劃,在GNU浪潮下,孕育了一大批自由軟件,它們叫做GNU軟件,GNU軟件採用的授權協議叫做GPL協議

由於Linux系統大量使用了GNU軟件,它可以被視爲Linux內核+GNU軟件的組合,所以有人也建議將Linux系統成爲Linux/GNU系統

GCC和G++

它們兩個分別是C和C++的編譯器,用於將源文件編譯成程序
GCC:GNU C Compiler
G++:GNU C++ Compiler
從命名就可以知道,它們實際就是GNU軟件,只不過功能定位是語言編譯器
GCC也可以編譯C++程序,只不過在使用上麻煩一點,需要一些額外設置
由於C++語言本身就包含了C語言在內,所以G++肯定也是可以編譯C語言代碼的
這裏簡單說明下這兩個屬於的概念,具體工作原理和關係,大家請自行了解,不屬於博客範疇

make與makefile

當源文件只有一個的時候,我們只需手動去執行GCC/G++命令即可,但是當源文件有很多個時,它們不但需要逐個去手動編譯,還要連接起來,這樣就極其麻煩了,於是make誕生了

make是一個具有類似批處理功能的編譯工具,它可以調用GCC/G++命令,它根據一個名爲makefile的腳本配置文件來決定如何對多個工程文件進行批量編譯

cmake與CMakeLists

make雖然能夠完成多個文件批量編譯的功能,但是它有着諸多缺陷,一是編寫比較麻煩,二是每個普通的腳本內容都不一樣

cmake就是在這種情況下誕生的,它的功能就是自動幫我們根據不同的平臺生成不同的makefile文件,給make命令使用,而CMakeLists則是cmake的腳本配置文件

MinGW

MinGW全稱Minimalist GNU for Windows,它是一套用於生成Windows程序的GNU工具集,包含了GCC/G++/make等編譯程序,還有一系列Window程序運行所需要的依賴庫,

Cygwin和MSVC

Cygwin和MSVC是和MinGW同一性質的東西,都是用於生成Windows程序的一整套編譯環境,只是特點不同

  • 相同點:他們最終都生成Windows程序,一般爲exe文件
  • MinGW:既能運行在Linux上,也能運行在Windows上,所以它是跨平臺的
  • Cygwin:只能運行在Windows上,它是一套模擬Linux環境的編譯器
  • MSVC:只能運行在Windows上,它是微軟自己的編譯器,由於Windows也是微軟的,所以MSVC是編譯效率最高的
  • MinGW和Cygwin其實都依賴於GCC/G++/make,對它們做了修改,來形成自己的一套編譯器
  • 如果想將Linux下的程序遷移到Windows,可以使用MinGW
  • 如果想在Windows上開發Linux風格的軟件,可以使用Cygwin
  • 如果是純粹的Windows程序開發,可以使用MSVC

MinGW和Cygwin是如何將GCC移植到Windows上的

  • MinGW將GCC對Linux系統接口的調用替換爲對Windows系統接口的調用,這樣使用同Linux系統上一樣的代碼,就可以被編譯出Windows程序
  • Cygwin則是編寫了一個名爲cygwin.dll的共享庫,將Windows中不存在的Linux風格接口,用WindowsAPI重新編寫封裝在裏面,這樣就在Windows系統上模擬出了一套Linux環境,之前Linux系統上的代碼照樣可以運行
  • 對比二者的實現方式,可以總結出,MinGW將所有系統相關接口全部重寫了,工作量比較大,編譯出來的是Windows風格的軟件。Cygwin則是儘量保留Linux風格,Windows中實在不存在的接口,才用WindowsAPI去重寫,模擬出在Linux上的功能
發佈了429 篇原創文章 · 獲贊 43 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章