是否可以(如何)在c / c ++代码中给出编译器指令

时间:2014-12-01 08:53:09

标签: c++ c compiler-optimization

我希望我的源代码能够提供特定的编译器指令(如删除符号,速度优化,堆栈帧大小等)。

就像#pragma comment(lib, "Mylibrary.lib")给链接器命令包含一个给定的库一样,我想知道我是否能做类似的事情

#if (__APPLE__)||(__ANDROID__)
/I"..\mobile\headers"
 -fvisibility=hidden -s 
#elif (WIN32)
 -O3
#endif

含义(对于windows32激活-O3优化,而对于手机隐藏一些符号并包含特定标题)。

我可以使用Make Files或Visual studio项目来做,但我想知道是否可以在源代码中完成它以使其更加平台和IDE独立

P.S。我理解指令需要与每个特定的编译器(gcc,LLVM,microsoft,...)和平台匹配

1 个答案:

答案 0 :(得分:1)

不是真的。您可以(在某种程度上)添加将影响编译器的编译指示注释(例如,您显示的编译指示库)。

这种解决方案将受到针对编译指示的编译器特定支持的限制。

在头文件中保留这些指令是一个错误的决定,因为必须编辑代码文件,更改构建系统设置不利于维护。

如果您在多个编译器的单个文件中拆分设置,您最终会遇到一种情况,即您可以更改一个编译器的内容,并中断其他编译器的编译设置。

在头文件中保留构建设置还会将编译设置传播到构建系统配置以外的位置(例如Visual Studio属性表或cmake文件),并使所有内容更难以跟踪,记录,跟踪并最终维护你的项目。

长期来看,你可能会更好地清理你的官方构建系统,而不是在包含文件中添加黑客攻击。