【发布时间】:2015-09-30 11:23:58
【问题描述】:
我们有一个库项目,它从旧 i386/i686/x86_64 中常见的未对齐数据访问过渡到对齐数据访问。推动力是 GCC 和矢量化,这导致 -O3 崩溃(GCC 甚至将字符串矢量化与 SSE4 原语相比)。
如果有人运行 make 并且特定的定义不存在,那么我们想打印一个 info 消息警告他们。我在制作食谱时遇到了麻烦。
以下配方在运行时会产生错误(它使用 TAB,而不是空格):
.PHONY check_defines
check_defines:
CONFIG_ALIGNED := $(shell $(EGREP) -i -c "[[:space:]]*#[[:space:]]*define[[:space:]]*NO_UNALIGNED_DATA_ACCESS" config.h)
CXX_ALIGNED := $(shell echo $(value CXXFLAGS) | $(EGREP) -i -c "-DNO_UNALIGNED_DATA_ACCESS")
ifeq ($(CONFIG_ALIGNED)$(CXX_ALIGNED),00)
$(info Warning: NO_UNALIGNED_DATA_ACCESS is not defined)
endif
错误是:
$ make check_defines
GNUmakefile:383: *** missing separator. Stop.
第 383 行是CONFIG_ALIGNED := ...。 5.1 Recipe Syntax 上的手册对我没什么帮助。
如何制定规则以在配方中执行测试?
【问题讨论】:
-
您可能希望在
-D和NO_UNALIGNED_DATA_ACCESS之间允许空格 -
您在虚假目标声明中缺少冒号。它应该是:
.PHONY: check_defines。这确实会触发missing separator错误。
标签: gnu-make