C/C++开发工具链的那些事儿

本文主要介绍C/C++开发过程中可能用到的一些工具,包括:gcc、g++、clang、cl、gdb、GCC、LLVM、MinGW、MSYS、MSYS2、VS、VS Code等。

在C/C语言代码的编译过程中主及以下几步:

  • 预处理

  • 编译

  • 汇编

  • 链接

一、编译器

传统的编译器通常分为三个部分,前端(FrontEnd),优化器(Optimizer)和后端(BackEnd)。在编译过程中,前端主要负责词法和语法分析,将源代码转化为抽象语法树;优化器则是在前端的基础上,对得到的中间代码进行优化,使代码更加高效;后端则是将已经优化的中间代码转化为针对各自平台的机器代码。

GCC

GCC(GNU Compiler Collection,GNU编译器套件)是由GNU开发的编程语言编译器。GNU编译器套件包括C、C++、 Objective-C、 Fortran、Java、Ada和Go语言前端,也包括了这些语言的库(如libstdc++,libgcj等)

gcc 是 GCC 编译器的通用编译指令,因为根据程序文件的后缀名,gcc 指令可以自行判断出当前程序所用编程语言的类别,比如:

  • xxx.c:默认以编译 C 语言程序的方式编译此文件;

  • xxx.cpp:默认以编译 C++ 程序的方式编译此文件。

  • xxx.m:默认以编译 Objective-C 程序的方式编译此文件;

  • xxx.go:默认以编译 Go 语言程序的方式编译此文件;

但如果使用 g++ 指令,则无论目标文件的后缀名是什么,该指令都一律按照编译 C++ 代码的方式编译该文件。也就是说,对于 .c 文件来说,gcc 指令以 C 语言代码对待,而 g++ 指令会以 C++ 代码对待。但对于 .cpp 文件来说,gcc 和 g++ 都会以 C++ 代码的方式编译。

LLVM

LLVM是构架编译器(compiler)的框架系统,以C++编写而成,用于优化以任意程序语言编写的程序的编译时间(compile-time)、链接时间(link-time)、运行时间(run-time)以及空闲时间(idle-time),对开发者保持开放,并兼容已有脚本。
目前官方的LLVM只支持处理C/C++,Objective-C三种语言,当然也有一些非官方的扩展,使其支持ActionScript、Ada、D语言、Fortran、GLSL、Haskell、Java bytecode、Objective-C、Python、Ruby、Rust、Scala以及C#。

LLVM主要由Clang前端、IR优化器(Pass)和LLVM后端构成。其功能分别是:

  • Clang前端:将平台相关的源码生成与平台无关的IR(llvm Bitcode)

  • IR优化器:主要对IR进行优化。

  • LLVM后端:将优化后的IR转换为与平台相关的汇编代码或者机器码。

Clang 是 LLVM 的前端,可以用来编译 C,C++,ObjectiveC 等语言。Clang 则是以 LLVM 为后端的一款高效易用,并且与IDE 结合很好的编译前端。

MSVC

Microsoft Visual C++(简称Visual C++、MSVC、VS或VC)是微软公司的免费C++开发工具,具有集成开发环境,可提供编辑C语言,C++以及C++/CLI等编程语言。VC++集成了便利的除错工具,特别是集成了微软Windows视窗操作系统应用程序接口(Windows API)、三维动画DirectX API,Microsoft .NET框架。

MinGW(Minimalist GNUfor Windows),它是一个可自由使用和自由发布的Windows特定头文件和使用GNU工具集导入库的集合,允许你在Windows平台生成本地的Windows程序而不需要第三方C运行时(C Runtime)库。运行时库:支持程序运行的基本函数的集合,一般是静态库lib或动态库dll。

而MSVC,就是上文所说的第三方C运行时库:由微软开发的VC运行时库,被Visual Studio IDE所集成。所以我们使用VS时会附带MSVC编译器。MSVC编译器工具链主要由cl.exe与link.exe构成,其中:

  • cl.exe用于控制在 Microsoft C/C++的编译器和链接器

  • link.exe 将通用对象文件格式 (COFF) 对象文件和库链接起来,以创建可执行 (.exe) 文件或动态链接库 (DLL)

用户只需要调用cl.exe,即可完成编译-链接全过程。Microsoft官方介绍:cl.exe的命令行语法


参考链接:

详解三大编译器:gcc、llvm 和 clang - 自由技艺的文章 - 知乎

GCC编译器30分钟入门教程 - C语言中文网

深入浅出让你理解什么是LLVM - 简书

MSVC编译器介绍 - CSDN

二、构建系统

构建系统(build system)是用来从源代码生成用户可以使用的目标(targets)的自动化工具。目标可以包括库、可执行文件、或者生成的脚本等等。
构建系统的需求是随着软件规模的增大而提出的。如果只是做软件编程训练,通常代码量比较小,编写的源代码只有几个文件。比如你编写了一段代码放入helloworld.c文件中,要编译这段代码,只需要执行以下命令:gcc helloworld.c
当软件规模逐渐增加,这时可能有几十个源代码文件,而且有了模块划分,有的要编译成静态库,有的要编译成动态库,最后链接成可执行代码,这时命令行方式就捉襟见肘,需要一个构建系统。常见的构建系统有GNU Make。需要注意的是, 构建系统并不是取代gcc这样的工具链,而是定义编译规则,最终还是会调用工具链编译代码。
当软件规模进一步扩大,特别是有多平台支持需求的时候,编写GNU Makefile将是一件繁琐和乏味的事情,而且极容易出错。这时就出现了生成Makefile的工具,比如CMake、AutoMake等等,这种构建系统称作元构建系统(Meta-Build System)。

Make

make 是一个命令工具,它解释 Makefile 中的规则。在 Makefile 文件中描述了整个工程所有文件的编译顺序、编译规则。Makefile 有自己的书写格式、关键字、函数。而且在 Makefile 中可以使用系统 shell 所提供的任何命令来完成想要的工作。Makefile 在绝大多数的 IDE 开发环境中都在使用,已经成为一种工程的编译方法。

Ninja

Ninja 是借由 Google Chrome 项目而诞生的一个构建工具,它的诞生目标是为了速度,最初是为了对Chromium、Swift等进行快速编译构建,用来替代GNU Make。换句话说,在 Google Chrome 项目的开发过程中,开发者们认为同类型的其它构建工具不给力,所以才会考虑重新开发更高效的工具。

GYP、CMake和Meson支持生成Ninja构建文件。

Nmake

nmake是Microsoft Visual Studio中的附带命令,需要安装VS,实际上相当于linux的make

Cmake

CMake是一个跨平台的元构建系统工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。只是 CMake 的组态档取名为 CMakeLists.txt。Cmake 并不直接建构出最终的软件,而是产生标准的建构档(如 Unix 的 Makefile 或 Windows Visual C++ 的 projects/workspaces),然后再依一般的建构方式使用。这使得熟悉某个集成开发环境(IDE)的开发者可以用标准的方式建构他的软件,这种可以使用各平台的原生建构系统的能力是 CMake 和 SCons 等其他类似系统的区别之处。

特点:

  • 支持多种语言,例如:C、C++、Java、Python等

  • 支持多种Build Backend,例如:Make,Ninjia,Visual Studio,Xcode等

GN

GN是一个生成Ninja构建文件的元构建系统,以便你可以用Ninja构建你的项目。

Meson

Meson 是用于自动化构建的自由软件,使用Python语言编写,在 Apache 许可证 2.0版本下发布,主要目标是为了让开发者节约用于配置构建系统的时间。

特点:

  • 对 Linux、macOS、Windows、GCC、Clang、Visual Studio 等的多平台支持

  • 支持的语言包括 C、C++、D、Fortran、Java、Rust

  • 在可读性和用户友好的非图灵完备 DSL 中构建定义

  • 许多操作系统和裸机的交叉编译

  • 在不牺牲正确性的情况下针对极快的完整和增量构建进行了优化

  • 与发行包一起工作的内置多平台依赖提供程序

Xmake

Xmake是国人开发的一个基于Lua的轻量级跨平台C/C++自动构建工具。xmake可以直接生成编译规则然后再调用编译器执行编译,它还有一个包管理器Xrepo,可直接安装某些C/C+库。

本节参考链接:https://zhuanlan.zhihu.com/p/570846866

三、IDE

集成开发环境(IDE,Integrated Development Environment )是用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面等工具。集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件服务套。所有具备这一特性的软件或者软件套(组)都可以叫集成开发环境。如微软的Visual Studio系列,Borland的C++ Builder、Delphi系列等。该程序可以独立运行,也可以和其它程序并用。

C语言的集成开发环境有:

  • Visual Studio 2022(简称 VS2022)

  • CLion

  • Dev C++

  • Visual C++ 6.0(简称 VC 6.0)

  • Code::Blocks

  • Turbo C 2.0

  • C-Free 5.0

  • Xcode(Mac OS平台)

VS

VS一般指Visual Studio xxx,其最新版本为Visual Studio 2022

Visual Studio 是一个出色的IDE,可用于构建适用于Windows、Mac、Linux、iOS 和Android 的丰富、精美的跨平台应用程序。 使用一系列技术(例如WinForms、WPF、WinUI、MAUI 或Xamarin)构建丰富的客户端应用。

VS Code

Visual Studio Code(简称“VS Code”)是Microsoft在2015年4月30日Build开发者大会上正式宣布一个运行于 Mac OS X、Windows和 Linux 之上的,针对于编写现代Web和云应用的跨平台源代码编辑器, [2] 可在桌面上运行,并且可用于Windows,macOS和Linux。它具有对JavaScript,TypeScript和Node.js的内置支持,并具有丰富的其他语言(例如C++,C#,Java,Python,PHP,Go)和运行时(例如.NET和Unity)扩展的生态系统。

VS Code仅仅是一个代码编辑器,如果你需要进行代码的调试运行,需要安装相应的插件并配置对应语言的编译器,例如C语言可以配置GCC编译器。

四、其他工具

MinGW

MinGW,是Minimalist GNU for Windows的缩写。它是一个可自由使用和自由发布的Windows特定头文件和使用GNU工具集导入库的集合,允许你在GNU/Linux和Windows平台生成本地的Windows程序而不需要第三方C运行时(C Runtime)库。MinGW 是一组包含文件和端口库,其功能是允许控制台模式的程序使用微软的标准C运行时(C Runtime)库(MSVCRT.DLL),该库在所有的 NT OS 上有效,在所有的 Windows 95发行版以上的 Windows OS 有效,使用基本运行时,你可以使用 GCC 写控制台模式的符合美国标准化组织(ANSI)程序,可以使用微软提供的 C 运行时(C Runtime)扩展,与基本运行时相结合,就可以有充分的权利既使用 CRT(C Runtime)又使用 WindowsAPI功能。

MSYS

Minimal GNU(POSIX)system on Windows,是一个小型的GNU环境,包括基本的bash,make等等。与Cygwin大致相当。

MSYS2

MSYS2 (Minimal SYStem 2) 是一个MSYS的独立改写版本,主要用于 shell 命令行开发环境。同时它也是一个在Cygwin (POSIX 兼容性层) 和 MinGW-w64(从"MinGW-生成")基础上产生的,追求更好的互操作性的 Windows 软件。相比MSYS有个更优秀的包管理器 pacman。

官网地址:https://www.msys2.org/


参考文献:

https://blog.csdn.net/SeaBiscuitUncle/article/details/126555431

https://www.cnblogs.com/knife-king/p/11090029.html

https://www.bilibili.com/read/cv18397621

https://blog.csdn.net/LaineGates/article/details/129336169

https://xie.infoq.cn/article/7ef2500ca920b61c181b060a0

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C 和 C++ 语言都是世界上最流行且使用最普遍的编程语言, 因此 Eclipse 平台(Eclipse Platform)提供对 C/C++ 开发的支持一点都不足为奇。 因为 Eclipse 平台只是用于开发者工具的一个框架,它不直接支持 C/C++;它使用外部插件来提供支持。 本文将向您演示如何使用 CDT — 用于 C/C++ 开发的一组插件。CDT 项目(有关接, 请参阅本文后面的 参考资料一节)致力于为 Eclipse 平台提供功能完全的 C/C++ 集成开发环境(Integrated Development Environment,IDE)。 虽然该项目的重点是 Linux,但它在可使用 GNU 开发者工具的所有环境(包括 Win32(Win 95/98/Me/NT/2000/XP)、QNX Neutrino 和 Solaris 平台)中都能工作。 CDT 是完全用 Java 实现的开放源码项目(根据 Common Public License 特许的),它作为 Eclipse SDK 平台的一组插件。这些插件将 C/C++ 透视图添加到 Eclipse 工作台(Workbench)中, 现在后者可以用许多视图和向导以及高级编辑和调试支持来支持 C/C++ 开发。 由于其复杂性,CDT 被分成几个组件,它们都采用独立插件的形式。 每个组件都作为一个独立自主的项目进行运作,有它自己的一组提交者、错误类别和邮件列表。 但是,所有插件都是 CDT 正常工作所必需的。 下面是 CDT 插件/组件的完整列表: 主 CDT 插件(Primary CDT plug-in)是“框架”CDT 插件。 CDT 功能 Eclipse(CDT Feature Eclipse)是 CDT 功能组件(Feature Component)。 CDT 核心(CDT Core)提供了核心模型(Core Model)、CDOM 和核心组件(Core Component)。 CDT UI是核心 UI、视图、编辑器和向导。 CDT 启动(CDT Launch)为诸如编译器和调试器之类的外部工具提供了启动机制。 CDT 调试核心(CDT Debug Core)提供了调试功能。 CDT 调试 UI(CDT Debug UI)为 CDT 调试编辑器、视图和向导提供了用户界面。 CDT 调试 MI(CDT Debug MI)是用于与 MI 兼容的调试器的应用程序连接器。 现在,让我们研究一下如何在实际应用程序中使用这些组件。图 1 显示了 Eclipse 中的 C/C++ 项目: 图 1. 在带有 CDT 插件的 Eclipse 中编辑 C/C++ 项目 安装和运行 CDT 在下载和安装 CDT 之前,首先必需确保 GNU C 编译器(GNU C compiler,GCC)以及所有附带的工具(make、binutil 和 GDB)都是可用的。 如果正在运行 Linux,只要通过使用适用于您分发版的软件包管理器来安装开发软件包。 在 Windows平台上,将需要安装 Cygwin 工具箱(请参阅 参考资料以获得接)。Cygwin 是用于 Windows 的类 UNIX 环境,它包括 GCC 移植以及所有必需的开发工具,包括 automake 和 GNU 调试器(GNU Debugger,GDB)。Cygwin 是在 cygwin1.dll 库基础上构建的。Cygwin 的备用解决方案是 Minimalist GNU for Windows(MinGW)(请参阅 参考资料以获得接)。 该工具是一组可免费获取、自由分发的特定于 Windows 的头文件和导入库,这些头文件和导入库与 GNU 工具集(它们允许您生成不依赖于任何第三方 DLL 的本机 Windows 程序)结合在一起。 如果您想要创建与 POSIX 兼容的 Windows 应用程序,那么 MinGW 是最佳选择。MinGW 甚至可以在 Cygwin 安装之上工作。 Solaris和 QNX要求您从因特网下载并安装其特定的 GCC、GNU Make binutils 和 GDB 移植(请参阅 参考资料以获得接)。 假设您安装了适当的 Java SDK/JRE 和 Eclipse 平台 SDK,并且它们都正常运行。CDT 以两种“方式”可用:稳定的发行版和试运行版(nightly build)。 试运行版未经完全测试,但它们提供了更多的功能并改正了当前错误。 安装之前,请检查磁盘上是否存在先前版本的 CDT,如果存在,请确保完全除去它。 因为 CDT 没有可用的卸载程序,所以需要手工除去它。 为了检查先前版本是否存在,转至 CDT 插件所驻留的目录: eclipse/plugins 。 接着,除
gSOAP编译工具提供了一个SOAP/XML 关于C/C++ 语言的实现,从而让C/C++语言开发web服务或客户端程序的工作变得轻松了很多。绝大多数的C++web服务工具包提供一组API函数类库来处理特定的SOAP数据结构,这样就使得用户必须改变程序结构来适应相关的类库。与之相反,gSOAP利用编译器技术提供了一组透明化的SOAP API,并将与开发无关的SOAP实现细节相关的内容对用户隐藏起来。   gSOAP的编译器能够自动的将用户定义的本地化的C或C++数据类型转变为符合XML语法的数据结构,反之亦然。这样,只用一组简单的API就将用户从SOAP细节实现工作中解脱了出来,可以专注与应用程序逻辑的实现工作了。gSOAP编译器可以集成C/C++和Fortran代码(通过一个Fortran到C的接口),嵌入式系统,其他SOAP程序提供的实时软件的资源和信息;可以跨越多个操作系统,语言环境以及在防火墙后的不同组织。   gSOAP使编写web服务的工作最小化了。gSOAP编译器生成SOAP的代码来序列化或反序列化C/C++的数据结构。gSOAP包含一个WSDL生成器,用它   来为你的web服务生成web服务的解释。gSOAP的解释器及导入器可以使用户不需要分析web服务的细节就可以实现一个客户端或服务端程序。   下面是gSOAP的一些特点:   ×gSOAP编译器可以根据用户定义的C和C++数据结构自动生成符合SOAP的实例化代码。   ×gSOAP支持WSDL 1.1, SOAP 1.1, SOAP 1.2, SOAP RPC 编码方式以及 literal/document 方式.   ×gSOAP是少数完全支持SOAP1.1 RPC编码功能的工具包,包括多维数组及动态类型。比如,一个包含一个基类参数的远程方法可以接收客户端   传来的子类实例。子类实例通过动态绑定技术来保持一致性。   ×gSOAP 支持 MIME (SwA) 和 DIME 附件包。   ×gSOAP是唯一支持DIME附件传输的工具包。它允许你在保证XML可用性的同时能够以最快的方式(流方式)传递近乎无大小限制的二进制数据   。   ×gSOAP 支持 SOAP-over-UDP。   ×gSOAP 支持 IPv4 and IPv6.   ×gSOAP 支持 Zlib deflate and gzip compression(for HTTP, TCP/IP, and XML file storage)。   ×gSOAP 支持 SSL (HTTPS)。   ×gSOAP 支持 HTTP/1.0, HTTP/1.1 保持连接, 分块传输及基本验证。   ×gSOAP 支持 SOAP 单向消息。   ×gSOAP 包含一个 WSDL 生成器,便于web服务的发布。   ×gSOAP 包含一个WSDL解析器(将WSDL转换为gSOAP头文件),可以自动化用户客户端及服务端的开发。   ×生成可以单独运行的web服务及客户端程序。   ×因为只需要很少内存空间,所以可以运行在类似Palm OS, Symbian, Pocket PC的小型设备中。   ×适用于以C或C++开发的web服务中。   ×跨平台:Windows, Unix, Linux, Mac OS X, Pocket PC, Palm OS, Symbian等。   ×支持序列化程序中的本地化C/C++数据结构。   ×可以使用输入和输出缓冲区来提高效率,但是不用完全消息缓冲来确定HTTP消息的长度。取而代之的是一个三相序列化方法。这样,像64位   编码的图像就可以在小内存设备(如PDA)中以DIME附件或其他方式传输。   ×支持C++单继承,动态绑定,重载,指针结构(列表、树、图、循环图,定长数组,动态数组,枚举,64位2进制编码及16进制编码)。   ×不需要重写现有的C/C++应用。但是,不能用unions,指针和空指针来作为远程方法调用参数的数据结构中元素。   ×三相编组:1)分析指针,引用,循环数据结构;2)确定HTTP消息长度;3)将数据序列化位SOAP1.1编码方式或用户定义的数据编码方式。   ×双相编组:1)SOAP解释及编码;2)分解“forward”指针(例如:分解SOAP中的href属性)。   ×完整可定制的SOAP错误处理机制。   ×可定制的SOAP消息头处理机制,可以用来保持状态信息   2 gSoap2.2版与gSOAP 2.1版(或以前版本)的不同   如果你是从2.1版升级到2.2或以后版本,请注意这些变化。   为了能够分离传输、内容编码、映射中的接收/发送设置,改变了运行时选项及标志。这些标志分布再四个类中:传输(IO),内容编码(ENC   
### 回答1: SolidWorks C#二次开发是指开发一些符合客户需求的软件程序,并与SolidWorks软件进行交互,从而实现自动化设计、减少重复性任务等目的。在二次开发过程中,通常需要了解SolidWorks API接口、C#语言以及相关的工程学知识,以满足客户的具体需求。 SolidWorks API接口是SolidWorks软件提供的应用程序接口,提供了基于COM(Component Object Model)架构的接口,以便C#开发人员能够对SolidWorks数据进行操作。通过API接口,二次开发人员可以对SolidWorks软件进行定制化,包括创建和修改零件、装配、图纸等。 C#语言是Microsoft公司开发的一种基于对象的编程语言,可以在.NET框架下运行。C#语言结构类似于C++语言,但是具有更加严格的类型安全和内存安全特性。在二次开发中,C#语言可以用于重写SolidWorks自带的VB.NET宏、编写SolidWorks插件、开发Windows应用程序等,从而使SolidWorks软件具有更为便捷和高效的使用体验。 总体来说,SolidWorks C#二次开发为客户提供了更多个性化定制化的需求和服务,增强了SolidWorks软件的功能和使用价值。同时,也为开发人员提供了很好的机会去探索和实践这些技能和知识,在软件开发领域发展自己的技术水平。 ### 回答2: SolidWorks是一种3D机械CAD软件,可以用于产品设计和工程。SolidWorks C是SolidWorks的API包,提供了一些C++语言的类和函数,允许您通过编程来扩展SolidWorks的功能和自定义应用。二次开发就是利用SolidWorks C API来创建自己的插件或外部应用程序,以改善工作流程或自动化任务。 二次开发的步骤通常包括定义你想要实现的功能,然后学习SolidWorks C API,编写代码,调试代码并创建部署解决方案。你可以创建自定义插件来完成诸如创建定制模型和零部件,自动化重复性任务,生成报告等任务,从而提高生产率并节省时间和成本。 SolidWorks C API非常强大和灵活,可以用于许多不同的应用程序。因此,如果你有足够的编程经验和SolidWorks知识,你可以创建高度定制的解决方案,帮助你节省时间和成本,同时增加工作的质量。二次开发可以改变整个生产流程,使您的业务能够更快速、高效地创造出令人印象深刻的成果。 ### 回答3: Solidworks是一种CAD软件,是用于机械设计和制造的最流行的工具之一。Solidworks C二次开发则是指基于Solidworks C++ API(应用程序接口)进行的开发。通过该API,用户可以自定义特定功能,满足特定的需求,和 Solidworks本身相比,二次开发的优势在于用户可以快速、准确地进行设计和分析。 Solidworks C二次开发主要使用的编程语言是C++,因此对于想要在Solidworks上进行开发的用户,需要具备一定的C++编程知识。不过,对于熟悉C++语言的开发者来说,使用Solidworks C++ API进行开发是一件非常容易的事情。 二次开发的主要目的是将Solidworks的功能扩展到用户需要的领域上。例如,用户可以开发自己的插件,添加新的设计工具和自定义功能,从而增强Solidworks的设计能力。此外,还可以创建自己的应用程序,用于与Solidworks进行交互,并实现特定的应用需求。 在实际应用中,Solidworks C二次开发可以被用于各种工业和研究领域,如机械设计、汽车工程、航空航天、医疗设备、海洋技术等。总的来说,Solidworks C++二次开发为用户提供了一个自定义设计工具的平台,是一个非常强大和有用的工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值