1

仅当运行 make 的机器(本机目标)支持 SSE 指令集时,我才想制作某些程序。假设它运行linux,

grep sse /proc/cpu_info | wc -l

如果不支持 SSE 指令,则返回 0,否则返回 >0。但是我怎样才能在我的makefile中使用它来促进条件make呢?

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

4

2 回答 2

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函数对值设置条件。

于 2013-02-13T16:55:07.403 回答
0

所以我自己想出了一个(工作!)解决方案,类似于 thiton 的建议:

SSE     := $(shell grep sse  /proc/cpuinfo)
INVALID := $(shell grep non-sense /proc/cpuinfo)

ifneq ($(INVALID),$(SSE))
sse_target
endif
于 2013-02-13T17:15:17.373 回答