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

浅谈开发环境

前言

工欲善其事,必先利其器。工作中经常用到的各种’东西’,如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

相关文章:

  • 视音频数据处理入门:颜色空间(二)---ffmpeg
  • 前端开发好用的AI工具介绍
  • AI 芯片全解析:定义、市场趋势与主流芯片对比
  • Stable Diffusion Prompt编写规范详解
  • 测试工程师的DeepSeek提效2:自动化测试应用
  • 科普篇之Java堆内缓存优化-IntegerCache的使用
  • 边缘计算概念、厂商介绍及产业分析
  • 软件架构设计7大原则
  • 面试八股文--数据库基础知识总结(3)MySQL优化
  • 使用Windbg分析dump文件定位软件异常的方法与操作步骤
  • pandas如何在指定位置添加一个dataframe
  • 力扣hot100刷题——栈
  • 【大模型系列篇】国产开源大模型DeepSeek-V3技术报告解析
  • quillEditor 禁用复制粘贴图片,以及class转style等问题
  • 【C++ 函数重载】—— 现代编译技术下的多态表达与性能优化
  • 【leetcode hot 100 56】合并区间
  • 【计算机网络】Socket
  • CSDN markdown 操作指令等
  • 动漫短剧开发公司,短剧小程序搭建快速上线
  • Springboot整合WebSocket+Redis以及微信小程序如何调用
  • 南京本地网站/成人培训机构
  • 烟台城乡建设住建局网站/关键词搜索趋势
  • 湛江电子商务网站建设/手机百度云电脑版入口
  • 协会网站建设制作/百度网盘搜索
  • 电子商务网站策划方案/宁波seo排名外包公司
  • 反向代理/大兵seo博客