配置构建环境
有时需要在运行./configure之前操作用户构建环境的某些方面。 flag-o-matic eclass 是操作CFLAGS、LDFLAGS等最佳选择。
CFLAGS进行操作的函数也对CXXFLAGS进行操作。Ebuild 不得简单地忽略用户 CFLAGS、CXXFLAGS 或 LDFLAGS — 请参阅不过滤变量。
标志过滤指南
如果软件包在任何合理的CFLAGS下都无法正常工作,那么最好在收到错误报告时过滤有问题的标志。合理的CFLAGS是-march=、-mcpu=、-mtune=(取决于体系结构)、-O2、-Os和-fomit-frame-pointer。请注意,通常应将-Os替换为-O2,而不是完全去除。 -fstack-protector标志可能也应该在此组中,尽管我们的加固团队声称此标志永远不会导致任何问题……
-pipe标志不影响生成的代码,因此在这里并不十分相关,但它是一个设置全局的明智标志。
如果软件包在其他(不合理的)CFLAGS下无法正常工作,则完全可以关闭该错误,并使用WONTFIX建议用户选择更合理的全局CFLAGS。同样,如果您怀疑错误是由不合理的CFLAGS引起的,则INVALID解决方案是合适的。
以下所有内容都假设 ebuild 在正确的位置有一行inherit flag-o-matic。
简单标志去除
filter-flags函数可用于从{C,CPP,CXX,CCAS,F,FC,LD}FLAGS中删除特定标志。可以提供多个参数;每个参数是要删除的标志的名称。
	# -fomit-frame-pointer leads to nasty broken code on sparc thanks to a
	# rather icky asm function
	use sparc && filter-flags -fomit-frame-pointer
有一个可用的filter-ldflags函数,它对LDFLAGS执行等效操作。
如果已知某个软件包对CFLAGS非常敏感,则strip-flags函数将删除大多数标志,只保留一组最小的保守标志。
	# Our app hates screwy flags
	strip-flags
标志替换
要将一个标志替换为另一个标志,请使用replace-flags。这最常用于将-Os替换为-O2(或者如果您感觉良好,则将-O3替换为-O2)。
	# Seems to have issues with -Os, switch to -O2
	replace-flags -Os -O2
还有一个名为replace-cpu-flags的特殊函数,用于替换 CPU(-mtune、-mcpu、-march)指定标志。最后一个参数是要使用的标志;前面的参数是要替换的标志。
	# Can't use ultrasparc or ultrasparc3 code, drop to v9
	replace-cpu-flags ultrasparc ultrasparc3 v9
添加额外标志
有时需要添加额外的CFLAGS或LDFLAGS。此处可以使用append-flags和append-ldflags函数。
	# If we're using selinux, we need to add a -D
	use selinux && append-flags "-DWITH_SELINUX"
	# Secure linking needed, since we're setuid root
	append-ldflags -Wl,-z,now
请参阅flag-o-matic.eclass以获取完整参考。