我想僅在運行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