c++ - C++ 工具链和编译器有什么区别?
问题描述
我知道有很多编译器,例如,gcc
但我一直听到“ ”等,但我不明白它们是什么,比如“gnu-toolchain”等clang
ninja
Toolchains
解决方案
有几个重要的术语:
编译器:将代码转换为已编译二进制格式的工具。这通常包括一个汇编程序步骤,严格来说不是真正的编译器。此外,您调用的工具通常是编译器/汇编器/链接器后端的“驱动程序”,您在构建过程的每个步骤(包括链接)中调用它们。例如
gcc
/g++
,clang
/clang++
,cl
,icc
/icpc
, ...汇编器:将编译器生成的二进制代码汇编成特定的目标文件格式(Visual Studio 的 .obj 文件,几乎所有其他文件的 .o 文件)。当从源代码生成目标文件时,这通常是内置的或至少由编译器调用。例如
as
,...链接器:将目标文件链接在一起成为可执行文件格式。这可以是共享库 (.dll/.dylib/.so) 或可执行应用程序 (.exe)。例子是
ld
,link
,lld
, ...(3a) “图书管理员”:Unix 工具
ar
或 Visual Studio 工具lib.exe
。这只是将目标文件捆绑到一个瘦包装格式(.a/.lib)中。调试器:用于在运行时检查源代码中定义的变量值的工具。例子是
gdb
,lldb
,windbg
, ...工具链:以上所有结合在一起。调试器可能会或可能不会被视为其中的一部分。
构建工具:调用工具链工具将一组源文件转换为一个或多个库和可执行文件的工具。例如
make
,ninja
,msbuild
,xcode-build
, ...项目生成器:获取项目的“抽象”描述以及源文件与输出文件的关系,并生成构建工具和/或 IDE 可以使用的内容,就好像项目是在该 IDE 中构建的一样。如果做得好,这将使跨平台开发的痛苦少得多。例子是
cmake
,qmake
,premake
, ...IDE:文本编辑器增强了不同级别的语言注释、代码导航和工具链集成。通常,您可以从一个 IDE 加载项目文件、搜索符号、构建、调试等。示例包括 Visual Studio、Qt Creator、KDevelop、Xcode、Eclipse、Code::Blocks ……以及适当的插件数组:Vim、Emacs、VSCode、Atom、Sublime Text……
推荐阅读
- python - Python - 为绘图构建数据框
- google-cloud-platform - 双引号字符串数据在谷歌存储上以三引号显示
- java - 如何在 5 小时后强制会话退出 TOMCAT 服务器(不是非活动会话退出)
- python - 无法注册碰撞
- firebase - 如何在 Firebase 上创建 Busuu 每日提醒通知
- aws-lambda - 功能即服务 (FaaS) 托管如何在后台工作?
- go - 为什么 go-jaeger-client 需要度量和日志的包装器?
- reactjs - 为什么 Scrollspy 未在反应应用程序中加载?
- java - 异步回调和监听器
- sql - 如何在 SQL Server 脚本中使用临时表?