在代码中本地化 g++ 编译选项
Localize g++ compile options within code
我正在寻找一种简单的方法来将某些 g++(具体来说是 g++-4.9)编译选项本地化到某些代码行或至少是目标函数。一般来说,我感兴趣,但也特别感兴趣 -fast-math
、-ffinite-math-only
和 -fno-signed-zeros
选项。
我认为 make
实用程序可以在 *.cpp 文件级别进行本地化,但我希望有一种方法可以通过 #pragma 或 [=24 在代码本身中启用它=] 之类的。我想这样做不仅是为了最大限度地减少对外部文件的依赖性(即不正确 makefile
的风险),而且希望将某些 FP 行为超本地化到函数内的特定方程式。
或者,如果无法通过内联指令对 FP 行为进行本地化,如果在项目构建中未启用所需的编译器指令(例如 makefile
丢失),我可以做些什么来至少触发编译时错误或不当修改)。
我假设这种内联优化可能是特定于编译器的,在这种情况下是 g++,但这是我愿意接受的妥协。
您可以使用函数属性中的 fpmath
选项打开其中的某些部分,但我从文档中不清楚这一点。鉴于此,我将专注于检测:
-fast-math
已经开启 -ffinite-math-only
,因此您无需担心。 -fast-math
的文档说:
This option causes the preprocessor macro FAST_MATH to be
defined.
也就是说可以通过
检测到
#ifndef __FAST_MATH__
#error "The -fast-math compiler option is required"
#endif
我还没有找到一种编译时方法来检测 -fno-signed-zeros
的存在
在gcc
中你可以使用function attribute optimize
:
void f () __attribute__ ((optimize("fast-math"), optimize("finite-math-only"), optimize("no-signed-zeros")));
我不确定您是否正确使用了 "localize" 这个词。 Localization 与使软件适应不同人类语言(法语、俄语、汉语...)的用户有关
也许您想要求编译器使用其他优化标志优化某些 函数。
这可以使用 #pragma GCC optimize
etc... or using some function attributes
我正在寻找一种简单的方法来将某些 g++(具体来说是 g++-4.9)编译选项本地化到某些代码行或至少是目标函数。一般来说,我感兴趣,但也特别感兴趣 -fast-math
、-ffinite-math-only
和 -fno-signed-zeros
选项。
我认为 make
实用程序可以在 *.cpp 文件级别进行本地化,但我希望有一种方法可以通过 #pragma 或 [=24 在代码本身中启用它=] 之类的。我想这样做不仅是为了最大限度地减少对外部文件的依赖性(即不正确 makefile
的风险),而且希望将某些 FP 行为超本地化到函数内的特定方程式。
或者,如果无法通过内联指令对 FP 行为进行本地化,如果在项目构建中未启用所需的编译器指令(例如 makefile
丢失),我可以做些什么来至少触发编译时错误或不当修改)。
我假设这种内联优化可能是特定于编译器的,在这种情况下是 g++,但这是我愿意接受的妥协。
您可以使用函数属性中的 fpmath
选项打开其中的某些部分,但我从文档中不清楚这一点。鉴于此,我将专注于检测:
-fast-math
已经开启 -ffinite-math-only
,因此您无需担心。 -fast-math
的文档说:
This option causes the preprocessor macro FAST_MATH to be defined.
也就是说可以通过
检测到#ifndef __FAST_MATH__
#error "The -fast-math compiler option is required"
#endif
我还没有找到一种编译时方法来检测 -fno-signed-zeros
在gcc
中你可以使用function attribute optimize
:
void f () __attribute__ ((optimize("fast-math"), optimize("finite-math-only"), optimize("no-signed-zeros")));
我不确定您是否正确使用了 "localize" 这个词。 Localization 与使软件适应不同人类语言(法语、俄语、汉语...)的用户有关
也许您想要求编译器使用其他优化标志优化某些 函数。
这可以使用 #pragma GCC optimize
etc... or using some function attributes