我知道有很多编译器,例如jq: error: a99cce09747507feb74799e1e1c9459aba43d4a6/0 is not defined at <top-level>, line 1:
.images |= map(select(.name=="XXXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/backend-admin").newTag |= a99cce09747507feb74799e1e1c9459aba43d4a6)
,gcc
,clang
,但我不断听到“ ninja
”之类的信息,但我不明白它们的含义就像“ gnu-toolchain”之类的
答案 0 :(得分:4)
工具链是用于构建项目的一组工具(例如编译器,链接器和汇编器)。可以将其他工具(例如调试器)与工具链关联。可能有几个工具链可用,具体取决于系统上安装的编译器。
答案 1 :(得分:3)
我知道有很多编译器,例如gcc,clang,ninja
ninja不是编译器。它是构建自动化工具或“构建系统”。构建自动化工具读取配置,并生成必要的命令以调用构建程序所需的工具链中的工具。
例如,CMake是什么?
CMake是一种配置语言和一种程序,可为构建自动化工具(例如忍者)生成配置。
使用这种生成器的原因是您可以选择使用任何构建系统(由生成器支持),这很重要,因为并非所有系统都支持所有构建系统。构建系统生成器的另一个原因是检测系统的功能和使用的工具链,并使用该信息来更改配置。
C ++工具链和编译器之间有什么区别?
工具链是将您的源文件转换为可执行文件(或库)并执行它所需的一组工具。
编译器是工具链包含的工具之一。编译器的工作是将源文件作为参数,并为目标系统生成汇编代码-尽管此视图已变得过时:随着链接时间的优化,编译器生成了“中间表示”语言。
例如“ gnu-toolchain”
GNU工具链是一组使用GNU编译器(即GCC)的工具。
那么工具链包含什么?
它可以取决于上下文,但是以下是典型的:
翻译阶段:
执行阶段:
其他工具也可能被视为工具链的一部分,例如:
程序员可以使用的许多其他小工具。
答案 2 :(得分:1)
有几个重要的术语:
编译器:将代码转换为已编译二进制格式的工具。这通常包括一个汇编程序步骤,严格来说,它实际上并不是编译器。另外,您调用的工具通常是编译器/汇编器/链接器后端的“驱动程序”,您可以在构建过程的每个步骤(包括链接)中调用它们。例如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,...