我想仅在运行make的机器(本地目标)上支持SSE指令集时才制作某些程序。假设它运行linux,有条件地取决于对SSE指令的支持
grep sse /proc/cpu_info | wc -l
如果不支持SSE指令,则返回0;否则返回> 0。但是我怎样才能在我的makefile中使用它来促进条件制作?
我目前使用GNU Make 3.81,在linux上运行。
我想仅在运行make的机器(本地目标)上支持SSE指令集时才制作某些程序。假设它运行linux,有条件地取决于对SSE指令的支持
grep sse /proc/cpu_info | wc -l
如果不支持SSE指令,则返回0;否则返回> 0。但是我怎样才能在我的makefile中使用它来促进条件制作?
我目前使用GNU Make 3.81,在linux上运行。
所以我想通了,我自己一个(工作!)的解决方案,类似的建议通过thiton:
SSE := $(shell grep sse /proc/cpuinfo)
INVALID := $(shell grep non-sense /proc/cpuinfo)
ifneq ($(INVALID),$(SSE))
sse_target
endif
在传统的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
函数对该值进行条件。
传统上,这是autoconf'和'configure'的'域。使用它们而不是简单的'make'。 – thiton 2013-02-13 16:53:06