当前位置: 首页 > article >正文

浅谈开发环境

前言

工欲善其事,必先利其器。工作中经常用到的各种’东西’,如CMake、QMake、Make、MSBuildCLang、GCC、MinGW、MSVC等,有些在命名上有些类似,实际作用却不尽相同。

因此这里换个角度来了解下这些‘东西’的作用,以及这些‘东西’之间的联系。

组成

基于多年开发经验,这里将个人理解的开发环境划分成4个部分:
1

下面开始逐一介绍。

构建系统

构建系统,是构建系统生成器的简称,它读取CMakeList.txt中的指令,生成特定构建工具(例如 Make、Ninja、Visual Studio、Xcode)所需的构建文件(例如 Makefile、.sln、.xcodeproj)。

这里引出下面要介绍的构建工具

常见的不同平台的构建系统(构建系统生成器)有:
2

CMake(跨平台通用)

CMake是目前最流行的跨平台构建系统生成器,广泛用于 C/C++ 项目(也支持其他编程语言),它使用 CMakeLists.txt 文件描述项目信息,通过CMake,可以生成各种构建工具的所需构建文件,例如 Makefile (用于 Make)、Ninja 构建文件、Visual Studio 解决方案文件 (.sln)、Xcode 项目文件 (.xcodeproj) 等。

QMake(跨平台通用)

QMake是Qt 官方提供的构建系统生成器,仅支持C++。

QMake使用 .pro 文件描述项目信息,通过QMake可以生成 Makefile(用于 Make)、Visual Studio 项目文件(.sln)。

QMake与 Qt 框架集成紧密,可以方便地处理 Qt 特有的构建步骤,例如 moc、uic 和 rcc。

Meson(Linux/macOS)

Meson是一个在 Linux 桌面开发领域相对较新的构建系统生成器,旨在提供更快的速度和更简洁语法的构建系统生成器。它使用简单的声明式语言描述构建过程,默认使用 Ninja 作为构建工具,当然也支持其他构建工具。

Autotools(Linux/macOS)

Autotools 是一套用于生成可移植的构建系统的工具集,它由 Autoconf、Automake 和 Libtool 等工具组成,共同协作来创建 configure 脚本和 Makefile 文件。

相当于是自带了构建系统、构建工具。扩展性较差,较为局限。

至此可以知道:构建系统(生成器)需要项目描述文件,并以此生成构建工具所需的构建文件。

构建工具

上面提到了构建系统(生成器)生成了各种构建文件,拿到构建文件后,构建工具就开始介入构建流程了。

构建工具,可以理解成自动化构建过程的工具,它们管理编译、链接、打包等步骤,并处理依赖关系。

常见的不同平台的构建工具有:
3

Make (GNU Make)

Make是一个经典的构建工具,使用 Makefile 文件描述构建规则,广泛用于 C/C++ 项目,支持 Linux/macOS。

Ninja

Ninja是一个小型的、专注于速度的构建系统,它旨在提供尽可能快的构建速度。

Ninja支持 Windows/Linux/macOS。

MSBuild (Microsoft Build Engine)

MSBuild 是微软的构建工具,用于构建应用程序。

它是 Visual Studio 的核心构建引擎,也支持在命令行中使用。

MSBuild 使用 XML 格式的项目文件(例如 .csproj、.vbproj、.vcxproj)来描述构建过程。

仅支持 Windows。

nmake

nmake 是微软的命令行构建工具,类似于 Unix 系统中的 make。

它读取 Makefile 文件,其中包含了构建项目的规则,然后根据这些规则执行相应的命令,从而自动化构建过程。

仅支持 Windows。

至此可以知道:构建工具通过构建系统(生成器)生成的构建文件,开始自动化构建过程(编译、链接、打包、处理依赖等)

编译器

通过对构建工具的介绍,这里可以知道编译是构建中的一环,大致流程如下:
4

此外的预处理器、链接器等因篇幅有限不再过多介绍。

常见的不同平台的编译器如下:
5

GCC

GCC是一个开源的编译器套件,支持多种编程语言,包括 C、C++、Fortran、Java 等。

GCC 不仅是编译器,它还包含其他工具,例如汇编器、链接器等,因此被称为“编译器套件”。

GCC通常与 Make构建工具一起使用。

支持 Linux/macOS。

CLang

CLang是一个基于 LLVM 的开源编译器前端,它旨在提供更快的编译速度、更好的错误诊断信息和更模块化的设计。

Clang 支持 C、C++、Objective-C 和 Objective-C++ 等语言。

Clang 通常与 LLVM 的后端一起使用,LLVM 提供代码优化和目标代码生成等功能。

Clang/LLVM 通常使用 Make 作为构建工具。

仅支持 macOS。

MinGW

MinGW是 GCC 在 Windows 平台上的一个移植版本,提供了一组 GNU 工具,包括 GCC 编译器、GNU binutils(包含汇编器、链接器等)以及其他必要的工具,MinGW 通常与 MSYS(Minimal System)或 MSYS2 结合使用,后者提供了一个类似 Unix 的 shell 环境,使得在 Windows 上可以使用 GNU 工具链进行开发。

MinGW使用自带Make作为构建工具。

仅支持 Windows。

MSVC

MSVC是微软的 C++ 编译器,是 Visual Studio IDE 的一部分。

MSVC 与 Visual Studio 集成紧密,提供了良好的 IDE 支持和调试功能。

Visual Studio 使用 MSBuild 作为构建工具。

仅支持 Windows。

编程语言/框架

不同编程语言使用的构建系统、构建工具、编译器等不尽相同,主流的有:

C、C++、Java、Python、Swift等。

集成开发环境(IDE)

集成开发环境(Integrated Development Environment,简称 IDE)是一种软件应用程序,它为程序员提供了一个统一的、多功能的平台,用于软件开发的各个阶段,从编写代码、调试到测试和部署。

常见的集成开发环境有:
6

VS Code本来是一个编辑器,本身并不自带编译器、链接器、调试器等工具,而是通过插件的方式外部调用系统已安装的工具进行实际开发。

应用示例

这里以C++/Qt为例,列举实际开发时所需环境:

Windows

环境①:

QMake + MSBuild/nmake + MSVC + Visual Studio/Qt Creator/VS Code

构建系统选择QMake,构建工具选择微软的MSBuild或nmake,编译器使用MSVC,IDE可选择VS、Qt Creator或VS Code。

环境②:

QMake + GNU Make + MinGW + Qt Creator/VSCode

构建系统选择QMake,构建工具选择GNU Make(GCC的Windows移植版),编译器使用MinGW,IDE可选择Qt Creator或VS Code。

环境③:

CMake + MSBuild/nmake + MSVC + Visual Studio/Qt Creator/VS Code/CLion

构建系统选择CMake,构建工具选择微软的MSBuild或nmake,编译器使用MSVC,IDE可选VS、Qt Creator、VS Code或CLion。

CLion对QMake的支持不太好,因此使用CMake的项目才考虑使用。

环境④:

CMake + GNU Make + MinGW + Qt Creator/VS Code/CLion

构建系统选择CMake,构建工具选择GNU Make(GCC的Windows移植版),编译器使用MinGW,IDE可选Qt Creator、VS Code或CLion。

Linux

环境①:

QMake + Make + GCC + Qt Creator/VS Code/CLion

构建系统选择QMake,构建工具系统自带的Make,编译器使用GCC,IDE可选择Qt Creator或VS Code。

环境②:

CMake + Make + GCC + Qt Creator/VS Code/CLion

构建系统选择CMake,后续选择同①。

通用

至此可以确定较为通用的环境如下:

构建系统:CMake 或 QMake

构建工具:Make(Windows有移植版)

编译器:GCC(Windows有移植版MinGW)

IDE:Qt Creator、CLion、VS Code


http://www.kler.cn/a/571550.html

相关文章:

  • 004build在设计页面上的使用
  • Linux | Ubuntu 与 Windows 双系统安装 / 高频故障 / UEFI 安全引导禁用
  • JAVA实战开源项目:安康旅游网站(Vue+SpringBoot) 附源码
  • 端到端自动驾驶——cnn网络搭建
  • Go语言--语法基础2--基本编程概念--语法单词说明
  • 基于RAG的法律条文智能助手
  • 增删改查 数据下载 一键编辑 删除
  • AI数据分析:deepseek生成SQL
  • nn.Identity 单位矩阵,同一矩阵
  • vue+elementui 实现上传文件/导入文件的功能
  • Golang的性能分析指标解读
  • Docker概念与架构
  • 【深入OpenCV图像处理:从基础到实战应用】
  • React 中 useState 的 基础使用
  • 医学图像处理开源库介绍:ITK、VTK 和 MITK
  • 【Java---数据结构】链表 LinkedList
  • CSS中各个元素的显示模式(块级/行内元素分类)
  • mysql唯一索引下插入数据死锁过程分析
  • 机器学习--特征选择
  • 每日OJ_牛客_游游的字母串_枚举_C++_Java