c++ - 是否可以从 gcc 的源代码中确定或设置编译器选项?

标签 c++ c gcc

我有一些代码需要特定的 gcc 编译器选项(否则无法编译)。当然,我可以确保在 makefile 中为这个特定的源文件设置了所需的选项。但是,如果可以从 source_file.cpp 中为相应的编译单元(或其中的一部分)设置此选项,将会更有帮助。

我知道可以使用 #pragma GCC diagnostic 打开或关闭警告消息,但是 -fsomething 类型的选项呢?我取自 this question这是不可能的。

但也许至少有一种方法可以从代码中检查某个 -f 选项是否打开?

注意 我对从二进制 as was asked previously 中查找编译器标志不感兴趣,也不是来自命令行。

最佳答案

根据我的经验,不会。这不是你处理这件事的方式。相反,您将特定于编译器/平台/操作系统的代码放入源代码中,并使用适当的 ifdef 语句将其包装起来。这些包括:

#ifdef __GNUC__
/*code for GNU C compiler */
#elif _MSC_VER
/*usually has the version number in _MSC_VER*/
/*code specific to MSVC compiler*/
#elif __BORLANDC__
/*code specific to borland compilers*/
#elif __MINGW32__
/*code specific to mingw compilers*/
#endif

在此范围内,您可以拥有特定于版本的要求和代码:

#ifdef __GNUC__
#  include <features.h>
#  if __GNUC_PREREQ(4,0)
//      If  gcc_version >= 4.0
#  elif __GNUC_PREREQ(3,2)
//       If gcc_version >= 3.2
#  else
//       Else
#  endif
#else
//    If not gcc
#endif

从那里开始,您的 makefile 根据编译器类型、版本等传递适当的编译器标志,一切就绪。

关于c++ - 是否可以从 gcc 的源代码中确定或设置编译器选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25649292/

相关文章:

c++ - 在 C++ 中创建 lambda 映射

C++ 调试 '<<' 未找到运算符

c - 通过宏传递宏参数

gcc - 特定库的链接部分

c - 在 GCC 中不能除数的原因是什么

c++ - VST 插件是如何制作的?

c++ - 以非阻塞方式打开 QDialog

c - 什么是TCP/IP堆栈?

c - 在嵌入式 C 中传递字符串变量

c - C 中 fgets 和 strtok 的问题