Mat*_*ner 13 c macros header autotools build-system
当定义一个头靠宏,如_FILE_OFFSET_BITS
,FUSE_USE_VERSION
,_GNU_SOURCE
等等,这里是把他们最好的地方?
我考虑过的一些可能性包括
CPPFLAGS
通过编译器在级别定义?(例如-D_FILE_OFFSET_BITS=64
)用于:
注意:适用于制作,自动工具和其他构建系统的合理性是我决定的一个因素.
如果宏影响系统头文件,它们可能应该到达影响包含这些系统头文件(包括那些间接包含它们的文件)的每个源文件的位置。因此,最合乎逻辑的地方是在命令行上,假设您的构建系统允许您设置 CPPFLAGS 等来影响每个文件的编译。
如果您使用预编译头,并且有一个必须首先包含在每个源文件中的预编译头(例如 MSVC 项目的 stdafx.h),那么您也可以将它们放在那里。
对于影响自包含库(无论是第三方库还是您编写的库)的宏,我将创建一个包装器标头来定义宏,然后包含库标头。然后,项目中对库的所有使用都应包含包装器标头,而不是直接包含库标头。这避免了不必要的定义宏,并清楚地表明它们与该库相关。如果库之间存在依赖关系,那么为了安全起见,您可能希望将宏设为全局(在构建系统或预编译头中)。