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

时间:2014-09-03 16:25:39

标签: c++ c gcc

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

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

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

注意我对从二进制文件as was asked previously或命令行中查找编译器标志不感兴趣。

2 个答案:

答案 0 :(得分:1)

您可以尝试使用某些#pragma。见GCC diagnostic pragmas& GCC function specific pragmas

否则,开发你的GCC插件或你的MELT扩展并让它提供一个pragma,它在GCC中设置适当的变量或编译器状态(实际上是cc1plus

答案 1 :(得分:1)

根据我的经验,没有。这不是你的方式。相反,您将源代码中的编译器/平台/操作系统特定代码放入其中,并使用适当的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根据编译器类型,版本等传递适当的编译器标志,你们都已经设置好了。

相关问题