从程序中获取编译器选项
Get the compiler options from the program
在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宏
- Win32编译器选项和内存分配
- C/C++预处理器是否可以检测一些编译器选项
- 是否有C++编译器选项允许激进地删除所有函数调用,并将参数传递给具有空体的函数
- 基于编译器选项的编译二进制路径
- Qt5 用户界面编译器:-i 选项不可用
- 将"-01"替换为"-02" 英特尔编译器选项会导致 FPE 在较小的 for 循环行程计数中抛出
- 用于捕获未赋值的 r 值的编译器选项
- 暂时将C++项目(VS2015)移至Android操作系统.编译器选项?
- VS2017 C++编译器选项会影响矩阵乘法?
- Gradle with C++:如何更改编译器选项?
- qmake中添加了编译器选项的附加makefile目标
- 在编译器选项上定义字符串
- Clang编译器选项将异常规格LAX错误视为警告
- "-D__STDC_FORMAT_MACROS" GNU 编译器选项
- 不同的输出调用clang上的malloc应用编译器选项-00和-03
- 包括查找编译器选项的外部标头
- 从已编译的可执行文件中获取编译器选项
- Protogen vs. Protoc 编译器选项
- 是否有一组标准编译器选项
- 如何在 eclipse makefile 项目中的编译器选项中设置 -std=c++0x