Compiler construction 编译器如何确定它在哪个平台上运行?

Compiler construction 编译器如何确定它在哪个平台上运行?,compiler-construction,Compiler Construction,如果有一个应用程序在两个不同的操作系统上受支持。每个操作系统都有一个特定的实现。我想知道编译器如何知道它在哪个平台上运行,从而编译实现X而不是Y。目标平台由编译器使用IDE或开发人员提供的命令行标志确定。例如,gcc的-m32标志,或MinGW的-mwindow。您可以在编译器文档中看到的此标志的完整集 目标平台由编译器使用IDE或开发人员提供的命令行标志确定。例如,gcc的-m32标志,或MinGW的-mwindow。您可以在编译器文档中看到的此标志的完整集 编译器通常采用高级语言(如C、Ru

如果有一个应用程序在两个不同的操作系统上受支持。每个操作系统都有一个特定的实现。我想知道编译器如何知道它在哪个平台上运行,从而编译实现X而不是Y。

目标平台由编译器使用IDE或开发人员提供的命令行标志确定。例如,gcc的
-m32
标志,或MinGW的
-mwindow
。您可以在编译器文档中看到的此标志的完整集

目标平台由编译器使用IDE或开发人员提供的命令行标志确定。例如,gcc的
-m32
标志,或MinGW的
-mwindow
。您可以在编译器文档中看到的此标志的完整集

编译器通常采用高级语言(如C、Rust、Go)编写的程序,并为特定的操作系统和体系结构生成可执行文件。如果您有一个可以支持多个操作系统和体系结构的编译器,那么您很可能会通过命令行标志或某个配置文件传入相应的参数。编译器还可以尝试通过环境变量(如“OS”和“PROCESSOR_ARCHITECTURE”)推断目标操作系统(假设目标操作系统与运行编译器的操作系统相同)。

编译器通常使用高级语言编写的程序(如C、Rust、Go),并为特定操作系统和体系结构生成可执行文件。如果您有一个可以支持多个操作系统和体系结构的编译器,那么您很可能会通过命令行标志或某个配置文件传入相应的参数。编译器还可以尝试通过诸如“OS”和“PROCESSOR_ARCHITECTURE”等环境变量推断目标操作系统(假设目标操作系统是运行编译器的同一操作系统)。

例如,
Java虚拟机
具有特定于每个平台的本机代码。我不确定
JIT
编译器如何决定执行哪个本机调用。@Bionix1441:当他们构建JVM或某个多目标编译器(例如gcc)时,他们用一些构建选项指定它必须针对Windows的目标,比如说x86。这将更改编译的代码/最终可执行文件中构建的选项。它没有什么神奇之处。例如,
Java虚拟机
有本机代码,这是特定于每个平台的。我不确定
JIT
编译器如何决定执行哪个本机调用。@Bionix1441:当他们构建JVM或某个多目标编译器(例如gcc)时,他们用一些构建选项指定它必须针对Windows的目标,比如说x86。这将更改编译的代码/最终可执行文件中构建的选项。这没有什么神奇之处。