我有一些代码需要某个gcc编译器选项(否则它不会编译)。当然,我可以在makefile中确保为此特定源文件设置了所需的选项。但是,如果可以在source_file.cpp
内为相应的编译单元(或其中的一部分)设置此选项,则会更有帮助。
我知道可以使用#pragma GCC diagnostic
打开或关闭警告消息,但-fsomething
类型的选项呢?我从this question看出这是不可能的。
但也许至少有一种方法可以从代码中检查某个-f
选项是否开启?
注意我对从二进制文件as was asked previously或命令行中查找编译器标志不感兴趣。
答案 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根据编译器类型,版本等传递适当的编译器标志,你们都已经设置好了。