makefileの「設定」セクションのレシピの外で実行したいシェルコマンドの結果に応じて、CFLAGS make変数に別のオプションを追加したいと思います。これが私が思いついたものです:
GCC_VERSION := $(shell gcc -dumpversion); \
if [[ ${GCC_VERSION} > 5.0 ]] ; then \
CFLAGS += -D _POSIX_C_SOURCE=199309L; \
fi
まず、上記のようにシェルmake関数を使用してコマンドを実行します。上記のコードを実行すると、この定義フラグは追加されません。これを行うには、特にLinuxでGCCバージョン5.4.0を使用しています。条件文を実行するには新しいシェルを作成する必要があるため、これは間違っているようです。新しいシェルにはGCC_VERSION変数は存在しません。しかし、私は間違っているかもしれません。
私がこれが好きなら(すべて1つのシェルで):
$(shell GCC_VERSION=$(gcc -dumpversion); \
if [[ ${GCC_VERSION} > 5.0 ]] ; then \
CFLAGS += -D _POSIX_C_SOURCE=199309L; \
fi)
エラーが発生します。
*** recipe commences before first target. Stop.
はい、とても混乱しています。
誰でも助けることができれば幸いです。ありがとうございます。
答え1
このソリューションを含む多くのソリューションがあります。 Makefileで使用
VERSION5 := $(shell \
GCC_VERSION=$$(gcc -dumpversion); \
[[ $$GCC_VERSION > 5.0 ]]; \
echo $$? )
ifeq (${VERSION5}, 0)
CFLAGS += -D _POSIX_C_SOURCE=199309L
endif
特に、シェルスクリプトのすべての項目に使用する必要があります$$
。$
文字列比較が5.0
trueの場合、シェルは0をエコーし、そうでない場合は1をエコーしてmake変数に保存しますVERSION5
。
その後、Makefileのテストはifeq
変数を0と比較し、CFLAGS
一致する場合は変数を編集します。