C++ 生態:編譯器、IDE、測試工具大全

編寫專業的 C++ 應用程序,您不僅需要基本的文本編輯器和編譯器。您還需要更多工具。在這篇文章中,我們將介紹大量 C++ 編程工具,包括:編譯器,IDE,調試器等。

介紹

C++計算機編程語言已經成爲使用最廣泛的現代編程語言之一。使用C++構建的軟件以其性能和效率而聞名。C++已用於構建衆多廣受歡迎的核心庫、以及類似 Microsoft Office 之類的應用程序,Unreal之類的遊戲引擎,Adobe Photoshop之類的軟件工具,Clang之類的編譯器,MySQL之類的數據庫,甚至包括Windows之類的操作系統。平臺不斷髮展和壯大。

現代C++被定義爲利用基於 C++11,C++14 和 C++17 語言特性的C++代碼。這些按年份命名的語言標準(分別是2011年,2014年和2017年),包括對核心語言的許多重要新特性和增強,以實現功能強大,高性能和無錯誤的代碼。現代C++具有支持面向對象編程,函數編程,泛型編程和低級內存操作功能的高級功能。

包括微軟、因特爾和自由軟件基金會等,都有其自己的C++編譯器。諸如 Microsoft,QT Company,JetBrains和Embarcadero之類的公司提供了用於編寫C++代碼的集成開發環境。適用於C++的流行庫可用於廣泛的計算機學科,包括人工智能、機器學習、機器人、數學、科學計算、音頻處理和圖像處理等等。

在這篇文章中,我們將介紹許多編譯器,構建工具,IDE,庫,框架,編碼助手,以及更多可以支持和增強現代C++開發的內容。

開始吧!

編譯器,構建工具和程序包管理器

有許多支持現代C++的流行編譯器,包括 GCC/g ++,MSVC(Microsoft Visual C ++)和 Clang。每個編譯器對操作系統的支持都不同,GCC/g ++始於1980年代後期,Microsoft的Visual C ++於1990年代初,而Clang則在2000年代後期。這三個編譯器都支持現代C++,至少支持C++ 17,但是它們各自的源代碼許可差異很大。

GCC

GCC是GCC指導委員會開發、維護和定期更新的通用編譯器,率屬於GNU項目。GCC描述了許多針對硬件平臺和多種語言的龐大編譯器家族。雖然它主要針對類Unix平臺,但Windows可以通過Cygwin或MinGW運行時庫提供支持。GCC 支持編譯最新的C++代碼,直至C++17,並提供了對某些C++20功能的實驗性支持。它還可以編譯基於C++標準的各種語言擴展。GCC 使用 GPLv3 許可進行開源,帶有GCC運行時庫例外。GCC得到了CMake和Ninja等構建工具的支持,以及CLion,Qt Creator和Visual Studio Code等許多IDE的支持。 https://gcc.gnu.org/ https://gcc.gnu.org/projects/cxx-status.html

Microsoft Visual C ++

Microsoft Visual C ++(MSVC)是微軟公司的編譯器,用於實現自定義C++標準(稱爲Visual C ++)。它會定期更新,並且像GCC和Clang一樣,支持最新C ++17的現代C++標準,並提供對某些C++20功能的實驗性支持。MSVC是在Microsoft自己的Visual Studio中構建C++應用程序的主要方法。它通常針對Windows,Android,iOS和Linux上的許多體系結構。對構建工具和IDE的支持是有限的,但仍在增長。CMake擴展在Visual Studio 2019中可用。MSVC可以與Visual Studio Code一起使用,CLion和Qt Creator的有限支持以及其他擴展。MSVC是微軟專有的項目,可以通過商業許可獲得,同時也提供社區版。 https://zh.wikipedia.org/wiki/Microsoft_Visual_C%2B%2B https://devblogs.microsoft.com/visualstudio/ https://visualstudio.microsoft.com/vs/community/

Clang

Clang描述了爲LLVM項目維護和定期開發的C語言族的大量編譯器。儘管它針對許多流行的體系結構,但是與GCC相比,它支持的平臺較少。LLVM項目通過關鍵設計原則定義了Clang —— 嚴格遵守C++標準(儘管提供了對GCC擴展的支持),模塊化設計以及在編譯過程中對源代碼的結構進行的最小修改等。像GCC一樣,Clang編譯具有支持C++17標準和實驗性C++20的現代C++代碼。它可以在開源(Apache許可證版本2.0)許可下使用。Clang還獲得了諸如CMake和Ninja之類的構建工具以及諸如CLion,Qt Creator,Xcode之類的IDE之類的廣泛支持。 https://clang.llvm.org/ https://clang.llvm.org/cxx_status.html

Make

Make是廣泛使用的知名構建系統,尤其是在Unix和類似Unix的操作系統中。Make通常用於從源代碼構建可執行程序和庫。但是該工具適用於涉及執行任意命令以將源文件轉換爲目標結果的任何過程。Make與任何特定的編程語言都不緊密。它會自動確定已更改了哪些源文件,然後執行最少的構建過程以獲取最終輸出。它還用於將編譯結果安裝到系統 https://www.gnu.org/software/make/

CMake

CMake是用於管理構建過程的跨平臺工具。尤其是大型應用程序和依賴庫的構建,可能是一個非常複雜的過程,尤其是當您支持多個編譯器時。CMake對此進行了抽象。您可以使用一種通用語言定義複雜的構建過程,並將其轉換爲適用於各種被支持的編譯器、IDE和構建工具的本機構建指令,包括Ninja(如下所示)。有適用於Windows,macOS和Linux的CMake版本。 https://cmake.org/

Ninja

Ninja構建系統用於構建應用程序的實際過程,類似於Make(一個傳統的但現在使用較少的實用程序)。它着重於通過並行化構建來儘可能快地運行。它通常與CMake配對使用,後者支持爲Ninja構建系統創建構建文件。Ninja 的功能集故意保持最小,因爲重點在於速度。 https://ninja-build.org/

Microsoft Build Engine(MSBuild)

MSBuild是基於命令行的內置平臺,可從Microsoft獲得開源(MIT)許可。它可用於自動化編譯和部署項目的過程。也可以獨立使用或者與Visual Studio打包在一起,也可以從Github中獲得。MSBuild文件的結構和功能與Make非常相似。MSBuild具有基於XML的文件格式,主要支持Windows,但也支持macOS和Linux。諸如CLion和C ++ Builder之類的IDE也可以與MSBuild集成。 https://docs.microsoft.com/zh-cn/visualstudio/msbuild/msbuild

Conan,Vcpkg,Buckaroo

諸如Conan,vcpkg和Buckaroo之類的程序包管理器已在C++社區中變得越來越流行。程序包管理器是用於安裝庫或組件的工具。

Conan是一個分散式開源(MIT)軟件包管理器,它支持多個平臺和所有構建系統(例如CMake和MSBuild)。Conan支持二進制文件,其目標是自動化依賴性管理,以節省開發和持續集成的時間。

微軟的vcpkg是MIT許可下的開源軟件,支持Windows,macOS和Linux(甚至支持與CMake集成)。Vcpkr需要在Visual Studio 2015或更高版本中使用,因此其使用範圍有所限制。

Buckaroo是一個鮮爲人知的開源軟件包管理器,可以從GitHub,BitBucket,GitLab等獲取依賴項。Buckaroo爲許多IDE提供了集成,包括CLion,Visual Studio Code,XCode等。

以下是上述軟件包管理器的鏈接:

  • https://conan.io/
  • https://github.com/microsoft/vcpkg
  • https://buckaroo.pm/

Compiler Explorer & Online Tools

Compiler Explorer 是一個基於Web的工具,您可以從多種C++編譯器和同一編譯器的不同版本中進行選擇,用於測試代碼。這使開發人員可以在編譯器之間比較爲特定C++構造生成的代碼,並測試正確的行爲。不僅有Clang,GCC和MSVC,還有鮮爲人知的編譯器,例如DJGPP,ELLCC,Intel C ++等。 https://godbolt.org/

您還可以使用的便捷在線編譯器的列表:例如Coliru,Wandbox,CppInsighs等:https://arnemertz.github.io/online-compilers/

集成開發環境

大量的編輯器和集成開發環境(IDE)可用於現代C++開發。文本編輯器雖然很輕量級,但功能不如完整的IDE,因此僅用於編寫代碼的過程,而不用於調試或測試。全面開發需要其他工具,而IDE包含這些工具並集成到一個緊密集成的集成開發環境中。可以使用許多文本編輯器(例如Sublime Text,Atom,Visual Studio Code,vi/vim和Emacs)編寫C++代碼。但是,有些IDE是專門爲現代C++而設計的,例如CLion,Qt Creator和C ++ Builder,而Xcode和Visual Studio等IDE也支持其他語言。

Sublime Text,Atom 和 Visual Studio Code

  • Sublime Text 是一個商業文本編輯器,可通過插件擴展對現代C++的支持。
  • Atom是一個開放源代碼(MIT許可)文本編輯器,它通過帶有可用於調試和編譯的集成的軟件包來支持現代C++。
  • Visual Studio Code 是 Microsoft 提供的流行的開源(MIT許可)源代碼編輯器。

提供了許多擴展,這些擴展將諸如調試和現代C++的自動代碼完成等功能引入Visual Studio Code。Sublime Text,Atom和Visual Studio Code中,這些工具均可用於Windows,macOS和Linux。

以下是上述工具的鏈接:

  • https://www.sublimetext.com/
  • https://atom.io/
  • https://code.visualstudio.com/

Vi/Vim 和 Emacs

Vi/Vim 和 Emacs是基於命令行的免費文本編輯器,主要在Linux上使用,但也可用於macOS和Windows。可以通過使用腳本將現代C++支持添加到Vi/Vim,Emacs可以通過使用模塊來支持現代C++。 https://www.vim.org/ https://www.gnu.org/software/emacs/

CLion

CLion 是 JetBrains 的商業 IDE,支持現代C++。它可以與CMake和Gradle等構建工具一起使用,與GDB和LLDB調試器集成,可以與版本控制系統(例如Git),測試庫(例如Boost.Test)和各種文檔工具一起使用。它具有代碼生成,重構,動態代碼分析,符號導航等功能。 https://www.jetbrains.com/clion/

Qt Creator

Qt Creator 是 Qt Company 提供的免費開源IDE,支持Windows,macOS和Linux。Qt Creator具有UI設計器、語法高亮顯示、自動代碼完成以及與許多不同的現代C++編譯器(例如GCC和CLang)集成的功能。Qt Creator與Qt庫緊密集成,可快速構建跨平臺應用程序。此外,它與標準版本控制系統(如Git),調試器(如GDB和LLDB),構建系統(如CMake)集成,並且可以將跨平臺部署到iOS和Android設備。 https://www.qt.io/

C ++ Builder

C ++ Builder 是 Embarcadero Technologies的商業IDE,可在Windows上運行。C++ Builder屢獲殊榮,主要用於 Windows 開發的Visual Component Library(VCL)和用於Windows,iOS和Android的跨平臺開發的FireMonkey(FMX)。C ++ Builder編譯器具有Clang的增強版本,集成的調試器,可視UI設計器,數據庫庫,全面的RTL,以及諸如語法突出顯示,代碼完成和重構的標準功能。C ++ Builder具有CMake的集成,可以與Ninja以及MSBuild一起使用。 https://www.embarcadero.com/products/cbuilder https://www.embarcadero.com/products/cbuilder/starter

Visual C++

Visual C++是Microsoft的商業Visual Studio IDE。Visual Studio在IDE中集成了構建,調試和測試。它提供了Microsoft基礎類(MFC)庫,該庫封裝了對Win32 API 的訪問。Visual Studio 具有用於某些平臺的可視UI設計器,附帶 MSBuild,支持CMake並提供標準功能,例如代碼自動完成,重構和語法高亮顯示。此外,Visual Studio支持多種其他編程語言,其C++方面側重於Windows,並逐漸添加了對其他平臺的支持。 https://visualstudio.microsoft.com/

Xcode

Xcode是Apple提供的多語言IDE,僅在支持現代C++的macOS上可用。Xcode是專有軟件,但可從Apple免費獲得。Xcode具有集成的調試器,支持Git等版本控制系統,具有Clang編譯器,並使用libc++作爲其標準庫。支持標準功能包括語法高亮顯示,代碼自動完成和重構。此外,Xcode支持諸如CMake的外部構建系統,並利用LLDB調試器。 https://developer.apple.com/xcode/

調試與測試

GDB

GDB是基於便攜式命令行的調試平臺,支持現代C++,可在開放源代碼許可(GPL)下使用。許多編輯器和IDE(例如Visual Studio,Qt Creator和CLion)都支持與GDB集成。它也可以用於遠程調試應用程序,其中GDB在一個設備上運行,而被調試的應用程序在另一設備上運行。它支持許多平臺,包括Windows,macOS和Linux。 https://www.gnu.org/software/gdb/

LLDB

LLDB 是一個開源調試接口,支持現代C++並與Clang編譯器集成。它具有許多可選的性能增強功能,例如JIT,但還支持調試內存,多個線程和機器代碼分析。它是用C++構建的。LLDB是Xcode的默認調試器,可與Visual Studio Code,CLion和Qt Creator一起使用。它支持許多平臺,包括Windows,macOS和Linux。 https://lldb.llvm.org/

CATCH / CATCH2

Catch2是用於現代C ++的跨平臺開源(BSL-1.0)測試框架。Catch2 非常輕巧,因爲僅需要包含頭文件。單元測試可以標記併成組運行。它支持測試驅動的開發和行爲驅動的開發。Catch2還可以輕鬆與CLion集成。 https://github.com/catchorg/Catch2

Boost.Test

Boost.Test 是使用現代C++標準的功能豐富的開源(BSL-1.0)測試框架。它可用於通過可自定義的日誌記錄和實時監視來快速檢測錯誤,故障和超時。可以將測試分組到套件中,並且該框架支持小規模測試和大規模測試。 https://github.com/boostorg/test

Google Test

Google Test 是 Google 的C ++測試和模擬框架,可以通過開源(BSD)許可獲得。Google測試可以在多種平臺上使用,包括Linux,macOS,Windows等。它包含一個單元測試框架、斷言、死鎖測試、檢測故障、處理參數化測試以及創建XML測試報告。 https://github.com/google/googletest

CUTE

CUTE 是集成在Cevelop中的單元測試框架,但也可以獨立使用。它涵蓋從C++98到 C++2a 的C++版本,並且通過頭文件即可使用。雖然不如Google Test流行,但它的宏糾結較少,並且僅在沒有適當的C++功能可用的情況下使用宏。另外,通過迴避某些I/O格式化功能,它具有一種可輕鬆在嵌入式平臺上運行的模式。 https://cute-test.com/

Clang Sanitizers

  • AddressSanitizer- https://clang.llvm.org/docs/AddressSanitizer.html
  • UndefinedBehaviorSanitizer- https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html
  • LeakSanitizer- https://clang.llvm.org/docs/LeakSanitizer.html

Clang Sanitizers 是爲您的應用程序添加額外工具的工具(例如,它們替換了new/malloc/delete調用),並且可以檢測各種運行時錯誤:內存泄漏、指針刪除後使用、雙重釋放等。爲了改善您的構建流程,許多指南都建議在進行測試時增加消毒步驟。

總結

我希望上面的清單對C++開發必不可少的工具有一個整體的概述。

如果您想了解有關其他生態系統要素的更多信息:庫,框架和其他工具,請參閱Embarcadero的完整報告: C ++生態系統白皮書(這是一個非常漂亮的pdf,內容超過20頁!)

您可以在此參考資料中找到增強C++開發的工具,庫和框架的超長列表:https://github.com/fffaraz/awesome-cpp

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章