1

make を実行するマシン (ネイティブ ターゲット) で SSE 命令セットがサポートされている場合にのみ、特定のプログラムを作成したいと考えています。Linuxを実行すると仮定すると、

grep sse /proc/cpu_info | wc -l

SSE 命令がサポートされていない場合は 0 を返し、それ以外の場合は >0 を返します。しかし、それをメイクファイルで使用して、条件付きメイクを容易にするにはどうすればよいでしょうか?

私は現在、Linux上で動作するGNU Make 3.81を使用しています。

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

シェル関数は、シェル コマンドの出力に展開されます。これ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 に答える