首页 > 解决方案 > C++ 工具链和编译器有什么区别?

问题描述

我知道有很多编译器,例如,gcc但我一直听到“ ”等,但我不明白它们是什么,比如“gnu-toolchain”等clangninjaToolchains

标签: c++gccclangtoolchain

解决方案


有几个重要的术语:

  1. 编译器:将代码转换为已编译二进制格式的工具。这通常包括一个汇编程序步骤,严格来说不是真正的编译器。此外,您调用的工具通常是编译器/汇编器/链接器后端的“驱动程序”,您在构建过程的每个步骤(包括链接)中调用它们。例如gcc/ g++, clang/ clang++, cl, icc/ icpc, ...

  2. 汇编器:将编译器生成的二进制代码汇编成特定的目标文件格式(Visual Studio 的 .obj 文件,几乎所有其他文件的 .o 文件)。当从源代码生成目标文件时,这通常是内置的或至少由编译器调用。例如as,...

  3. 链接器:将目标文件链接在一起成为可执行文件格式。这可以是共享库 (.dll/.dylib/.so) 或可执行应用程序 (.exe)。例子是ld, link, lld, ...

    (3a) “图书管理员”:Unix 工具ar或 Visual Studio 工具lib.exe。这只是将目标文件捆绑到一个瘦包装格式(.a/.lib)中。

  4. 调试器:用于在运行时检查源代码中定义的变量值的工具。例子是gdb, lldb, windbg, ...

  5. 工具链:以上所有结合在一起。调试器可能会或可能不会被视为其中的一部分。

  6. 构建工具:调用工具链工具将一组源文件转换为一个或多个库和可执行文件的工具。例如make, ninja, msbuild, xcode-build, ...

  7. 项目生成器:获取项目的“抽象”描述以及源文件与输出文件的关系,并生成构建工具和/或 IDE 可以使用的内容,就好像项目是在该 IDE 中构建的一样。如果做得好,这将使跨平台开发的痛苦少得多。例子是cmake, qmake, premake, ...

  8. IDE:文本编辑器增强了不同级别的语言注释、代码导航和工具链集成。通常,您可以从一个 IDE 加载项目文件、搜索符号、构建、调试等。示例包括 Visual Studio、Qt Creator、KDevelop、Xcode、Eclipse、Code::Blocks ……以及适当的插件数组:Vim、Emacs、VSCode、Atom、Sublime Text……


推荐阅读