如果不存在必需的标志,则编译失败

时间:2011-09-22 16:58:26

标签: c++ c gcc

我有一些传统代码需要传入某些gcc标志。我可以为这些标志添加预处理器检查吗?

例如,假设我需要-fno-strict-aliasing,我可以这样做:

#ifndef _FNO_STRICT_ALIASING
   #error -fno-strict-aliasing is required!
#endif

2 个答案:

答案 0 :(得分:6)

您可以使用

#pragma GCC optimize "no-strict-aliasing"

使用该标志编译文件(覆盖命令行中指定的内容)。 您也可以使用

__attribute__((optimize("no-strict-aliasing")))

将标志应用于源文件中的单个函数...

答案 1 :(得分:3)

肯定没有#define,至少在我的GCC版本上。

要查看所有预定义的预处理器符号:

g++ -dM -E - < /dev/null

我认为没有办法测试这些选项。但是,如果您使用的是GCC 4.4或更高版本,则可以使用"optimize" function attribute"optimize" #pragma在每个功能或每个文件的基础上启用特定选项。

例如,如果将其添加到公共头文件中:

#if defined(__GNUC__)
#pragma GCC optimize ("no-strict-aliasing")
#else
#error "You are not using GCC"
#endif

...它应该为包含标题的每个文件启用该选项。

[更新]

好的,所以我花了大约10分钟才能写出这个答案。无论如何,我将把它留在这里,以获得GCC文档的链接。