有条件的制作取决于SSE指令的支持

时间:2013-02-13 16:49:23

标签: automation makefile sse

我想只在运行make的机器(本机目标)上支持SSE指令集时才创建某些程序。假设它运行linux,

grep sse /proc/cpu_info | wc -l
如果不支持SSE指令,则

返回0,否则返回> 0。但是我如何在makefile中使用它来促进条件制作呢?

我目前使用GNU Make 3.81,在linux上运行。

2 个答案:

答案 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