仅当运行 make 的机器(本机目标)支持 SSE 指令集时,我才想制作某些程序。假设它运行linux,
grep sse /proc/cpu_info | wc -l
如果不支持 SSE 指令,则返回 0,否则返回 >0。但是我怎样才能在我的makefile中使用它来促进条件make呢?
我目前使用 GNU Make 3.81,在 linux 上运行。
仅当运行 make 的机器(本机目标)支持 SSE 指令集时,我才想制作某些程序。假设它运行linux,
grep sse /proc/cpu_info | wc -l
如果不支持 SSE 指令,则返回 0,否则返回 >0。但是我怎样才能在我的makefile中使用它来促进条件make呢?
我目前使用 GNU Make 3.81,在 linux 上运行。
在传统的 GNU 用法中,您不会让make
做这项工作,而是configure
将其输出写入Makefile
. 毕竟,您不想每次运行时都重新检查您的环境make
——在最好的情况下,您浪费时间重新检查未更改的环境,而在最坏的情况下,您的构建会变得不一致。
也就是说,一个只做的解决方案看起来像:
HAVE_SSE=$(filter-out 0,$(shell grep sse /proc/cpu_info | wc -l))
CFLAGS+=$(if $(HAVE_SSE),-msse)
ifneq ($(HAVE_SSE),)
sse-target
endif
shell 函数扩展为 shell 命令的输出。这filter-out
使得非 SSE 输出一个空字符串,而不是0
因为这更容易条件化。然后,您可以使用所示的if
函数对值设置条件。
所以我自己想出了一个(工作!)解决方案,类似于 thiton 的建议:
SSE := $(shell grep sse /proc/cpuinfo)
INVALID := $(shell grep non-sense /proc/cpuinfo)
ifneq ($(INVALID),$(SSE))
sse_target
endif