我想只在运行make的机器(本机目标)上支持SSE指令集时才创建某些程序。假设它运行linux,
grep sse /proc/cpu_info | wc -l
如果不支持SSE指令,则返回0,否则返回> 0。但是我如何在makefile中使用它来促进条件制作呢?
我目前使用GNU Make 3.81,在linux上运行。
答案 0 :(得分:1)
在传统的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
函数对值进行条件化。
答案 1 :(得分:0)
所以我自己想出了一个(工作!)解决方案,类似于thiton的建议:
SSE := $(shell grep sse /proc/cpuinfo)
INVALID := $(shell grep non-sense /proc/cpuinfo)
ifneq ($(INVALID),$(SSE))
sse_target
endif