1

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

任何帮助将不胜感激

PS:虽然Detect GCC compile-time flags of a binary中的问题是查找激活的选项以编译程序,但我很感兴趣的是找到用于从该程序源中编译我的程序的确切命令行选项。

4

2 回答 2

2

除了从 Common Predefined Macros 创建编译字符串,这看起来很忙。我认为有一个简单的方法可以做到这一点。gcc -Von debian 会返回用于配置的标志。

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

就像是:

。/配置:

#!/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"

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

还值得注意的是,您很可能(如果不是总是)在实际编译之前创建此类文件,因此它们实际上是最新的并且在编译步骤期间有效。在get-the-compiler-options-from-a-compiled-executable 中的回答将暗示可执行文件已经存在,这在某些情况下可能会很糟糕。

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

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

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

于 2013-03-04T15:37:38.607 回答
0

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

我将此行添加到我的专业文件的末尾:

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

然后从 FLAGS 宏中检索我想要的内容

于 2013-03-04T17:59:06.807 回答