gpt4 book ai didi

c++ - 您能否从已编译程序中获取编译器的命令行内容?

转载 作者:行者123 更新时间:2023-12-05 04:38:35 26 4
gpt4 key购买 nike

出于愚蠢的原因,我需要一个字符串,其中包含编译器可执行文件嵌入到我正在编译的程序中的选项。这可以通过构建系统或构建系统生成器来实现,尽管方式很丑陋;但我想知道是否可以让我的编译器给我该信息。

语言:C++

编译器:g++、clang++、icpc、MSVC 中的每一个

我尝试了什么:我用 $CXX -dM -E -x c++ - < /dev/null 转储了所有定义,并且没有看到前 3 个编译器的相关内容。

注意:显然,语言本身并没有提供这种情况,我问的是特定于编译器的功能。

最佳答案

这完全超出了 C++ 标准的范围。除非您的编译器提供了明确的方法,否则您可以自己实现它。并且所有主要的 C++ 编译器以相同的方式实现它的机会,或者至少以某种可以确定的方式,在逐个编译器的基础上(使用嵌套的 #ifdefs ), 几乎没有。

因此,这取决于您自己实现。您将需要采用您正在使用的任何构建框架来编译和链接您的 C++ 代码——无论是 makefile、脚本还是用于它的任何工具——并进行适当的更改以捕获传递给的所有选项编译器,并将它们提供给您的应用程序。

例如,在 automake 处理的 Makefile.am 中,我会做这样的事情:

BUILT_SOURCES += compilation_options.H

compilation_options.H:
echo "#define compilation_options \"$(CXXFLAGS)\"" >compilation_options.H

这应该足够好,除非 CXXFLAGS 有一些引号或特定的标点符号,在这种情况下,这将需要更多的工作。也许加入 $(CPPFLAGS)$(LDFLAGS),作为一个很好的衡量标准。

您需要弄清楚如何为您使用的任何构建框架实现类似的东西;在某处没有通用按钮,可以按下以让每个编译器自动完成此操作。这需要明确实现。

关于c++ - 您能否从已编译程序中获取编译器的命令行内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70556464/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com