【问题标题】:Which C++ compiler is my program using?我的程序使用的是哪个 C++ 编译器?
【发布时间】:2011-08-06 17:46:10
【问题描述】:

我不是 cpp 编程方面的专家,而是庞大的编程世界的初学者,因为现在我们只需安装任何 IDE 并从其中的程序开始。我开始使用 CodeBlocks IDE,但出于好奇想知道我的程序使用的是哪个编译器,因为它可以是 4.3.2 或 4.0.8 或其他版本

我尝试阅读它不存在的构建日志,一个小的谷歌也没有帮助。

是否有任何简单的命令可以在我的 cpp 程序中运行并检查我的 IDE 正在使用哪个编译器?

提前致谢。

【问题讨论】:

  • 您想知道 Code::Blocks 使用哪个编译器,或者只是想知道一般来说如何判断哪个编译器正在从 C++ 代码编译一段 C++?
  • g++ --version 在命令提示符(或 shell)中通常应该可以解决问题。如果您在 Windows 上并且我相信 CodeBlocks 使用 MinGW,那么您必须在 MinGW shell 中输入它,或者如果它使用的是 Cygwin。
  • IDEs for Linux 你可能会感兴趣。
  • 嗨,首先非常感谢您的回复@Seth:我想知道如何判断我的程序中正在使用什么编译器的一般结果。 Arun:谢谢你的信息,它使用 MinGW,我想知道程序本身有没有办法? Milind:我已经知道 Linux 的 IDE,我什至不需要在那里使用任何 IDE,我只是使用终端运行程序。

标签: c++ compiler-construction


【解决方案1】:

你可以使用宏

__GNUC__
__GNUC_MINOR__
__GNUC_PATCHLEVEL__

http://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html

其他编译器提供自己的宏,例如微软的_MSC_VER

这是一个涵盖数十种编译器的非常全面的列表:http://predef.sourceforge.net/precomp.htmlhttp://sourceforge.net/apps/mediawiki/predef/index.php?title=Compilers

【讨论】:

    【解决方案2】:

    根据Codeblocks FAQ

    事实上,它很大程度上取决于使用的编译器插件。一些随默认 Code::Blocks 安装提供的有 GNU GCC (MinGW/Cygwin)、MS Visual C++ Free Toolkit 2003、Borland's C++ Compiler 5.5、DigitalMars Free Compiler.、OpenWatcom、Small Device C Compiler (SDCC) 等。

    【讨论】:

    • @Hans:我找到了所有这些的信息,请参阅我的答案中的链接。
    【解决方案3】:

    Code::Blocks 是一个非常通用的 IDE,可以使用许多编译器。您甚至可以为每个项目使用不同的编译器。

    根据您安装的版本(我有 2009 年 11 月 11 日构建,在 Windows 下运行)当您加载项目时,您可以转到“项目菜单”->“构建选项”项,您将看到您用于该项目的编译器 - 记下它。关闭该窗口,然后转到“设置”菜单->“编译器和调试器...”项。在它弹出的窗口中,确保您从左侧列表中选择了“全局编译器设置”图标。切换到“工具链可执行文件”页面,通过确保屏幕顶部的“选定编译器”下拉框与您的项目匹配,您可以从中获取项目正在使用的编译器可执行文件的确切路径。

    获取该信息的另一种方法是构建您的项目,然后切换到“构建日志”。命令行至少应该将编译器可执行文件作为它显示的文件名的一部分。

    然后,您可以从编译器文件名确定它是某种 GCC 衍生产品还是其他东西(例如 MSVC)。此时,它成为特定于编译器的,以找出您正在使用的版本。例如,如果它是 GCC 或端口,那么您可以运行:

    <path and filename of compiler> --version
    

    从命令提示符/shell 获取版本号。

    如果是MSVC,那么直接运行:

    <path and filename of compiler>
    

    将显示版本号。

    如果您想从编译器执行此操作(尽管从技术上讲,它将是预处理器),您需要了解上述信息才能知道您的编译器是什么,因为您需要知道要检查的预处理器宏,它们是编译器依赖。

    从好的方面来说,Code::Blocks 可能会使用 GCC,除非您在 Windows 上专门下载了没有 MinGW 的版本。所以你可能可以使用 Ben Voigt 描述的方法。

    编辑:缺少的换行符隐藏了编译器版本的命令行

    【讨论】:

    • 感谢您提供的信息,这真的很有帮助
    【解决方案4】:

    可能不是,编程环境定义了各种宏(提供 OS/SDK 版本等),但这些宏通常由包含文件而不是编译器设置。

    编译器可能会定义自己的符号,但您必须查看编译器文档。

    您可以检查路径并尝试使用“-v”或“/?”运行编译器(通常是 cc 或 cl)标记以查看它报告的内容

    【讨论】:

    • 编译器版本宏由编译器自己设置,在所有情况下我都知道。
    • @Ben 是的,但它们不是标准的,你需要编译器文档——这意味着你知道你有哪个编译器!没有什么比 WINVER 更值得您信赖的了
    • 似乎他确实知道哪个编译器,只是不知道版本(因为他阅读了构建日志)。
    • K,所以我从 cmets 和您所有的帮助中得出的结论是,无法知道直接在程序输出中运行您的 cpp 代码的编译器。虽然,当然还有其他方法
    猜你喜欢
    • 1970-01-01
    • 2011-02-14
    • 1970-01-01
    • 2022-10-23
    • 1970-01-01
    • 2015-06-23
    • 2016-09-02
    • 1970-01-01
    • 2011-11-25
    相关资源
    最近更新 更多