从程序中获取编译器选项

Get the compiler options from the program

本文关键字:编译器 选项 获取 程序      更新时间:2023-10-16

在c++中(使用gcc)是否有任何宏来获得用于构建可执行文件的编译选项?我确信我在一些关于对话框中看到过类似的东西。

任何帮助都将不胜感激

PS:虽然检测二进制文件的GCC编译时标志中的问题感兴趣的是找到激活的选项来编译程序,但我感兴趣的是找到用于从该程序源中编译我的程序的确切命令行选项。

除了从常用的预定义宏这似乎很忙。我想有一个简单的方法。debian上的gcc -V返回用于配置的标志。

然而,我的机会是在./configure等效步骤中获得完整的命令,并将其转储到像config_line.h这样的文件中作为定义。

类似:

./configure:

#!/bin/sh
echo "#define conf_flags "configured with: "$*""" >> config_line.h
#do some configuration steps here
#maybe even compilation itself

:

luk32:~/projects/tests$ ./test.sh --with=test
luk32:~/projects/tests$ cat ./config_line.h 
#define conf_flags "configured with: --with=test"

在define语句下获得外部文件中定义的完整配置行。我认为它相当直接和容易使用。并且不需要太多的编译器魔法。

值得注意的是,您很可能(如果不是总是)在实际编译之前创建这样的文件,以便它们在编译步骤中实际上是最新的和有效的。在get-the-compiler-options-from-a-compiled-executable中的答案将暗示可执行文件已经存在,这在某些情况下可能是令人沮丧的。

注意:我给出了bash的例子,但我很确定你可以在任何半下降的构建系统下输出类似的头文件,无论是make, qmake, cmake等,bash开始最简单的情况

我认为它们中的大多数都可以访问调用它们的命令行,并且它们提供了获取实际编译命令的简单方法。例如,提供两个字面量,一个是用于make的命令,如-j 13,另一个是用于make执行的实际编译步骤的g++ ...

注释2:我知道这不是OP问的答案,但我想这首先符合他的目的。

因为我正在使用qmake构建系统,所以我遇到了这个解决方案:

我将这行添加到我的概要文件的末尾:

QMAKE_CXXFLAGS += -DFLAGS="$$QMAKE_CXXFLAGS $$QMAKE_CXXFLAGS_RELEASE"

然后从FLAGS宏

中检索我想要的内容