0

MFLAGS で設定されたユーザー (var の種類) を検出し、適切な他のオプション (printf 形式) を追加しようとしています。

CC:=gcc
CFLAGS:=-g3 -Wall -pedantic -std=c99
LDFLAGS:=
MFLAGS:=-Dcost_type="int"  < default MFLAGS
SOURCES:=...
OBJECTS:=$(SOURCES:.c=.o)
EXECUTABLE:=...

ifneq (,$(findstring "-Dcost_type=\"int\"",$(MFLAGS)))
        MFLAGS:="$(MFLAGS) -Dcost_fmt=\"%d\""
endif
ifneq (,$(findstring "double",$(MFLAGS)))
        MFLAGS:="$(MFLAGS) -Dcost_fmt=\"%f\""
endif
...

しかし、その例はその入力のいずれにも反応していません:

make MFLAGS:="-Dcost_type=\"int\""
make MFLAGS:="-Dcost_type=\"double\""
4

2 に答える 2

2

ここにはいくつかの問題がありますが、

  1. コマンドラインから変数を変更するには、「オーバーライド」を使用する必要があります

  2. findstring に渡された文字列を引用しないでください

このように書き直して、

ifneq (,$(findstring -Dcost_type="int",$(MFLAGS)))
override MFLAGS += " -Dcost_fmt=\"%d\""
endif
ifneq (,$(findstring double,$(MFLAGS)))
override MFLAGS += " -Dcost_fmt=\"%f\""
endif
于 2012-04-29T20:19:35.073 に答える
0

もう一度助けを求めなければなりません。そのメイクファイルを書きましたが、「int」では機能しますが、「short」では機能しません(なぜですか?)。また、スペース (例: long long) についてはどうでしょうか。これは、make MFLAGS=-Dcost_type="\"long long\"" の場合、「long long」ではなく「long」ケースを使用するためです。

ifneq (,$(findstring short,$(MFLAGS)))
        override MLAGS+=-Dcost_fmt=\"%hd\" -Dcost_max=SHRT_MAX
endif
ifneq (,$(findstring unsigned short,$(MFLAGS)))
        override MFLAGS+=-Dcost_fmt=\"%hd\" -Dcost_max=USHRT_MAX
endif
ifneq (,$(findstring int,$(MFLAGS)))
        override MFLAGS+=-Dcost_fmt=\"%d\" -Dcost_max=INT_MAX
endif
ifneq (,$(findstring unsigned int,$(MFLAGS)))
        override MFLAGS+=-Dcost_fmt=\"%d\" -Dcost_max=UINT_MAX
endif
ifneq (,$(findstring long,$(MFLAGS)))
        override MFLAGS+=-Dcost_fmt=\"%ld\" -Dcost_max=LONG_MAX
endif
ifneq (,$(findstring unsigned long,$(MFLAGS)))
        override MFLAGS+=-Dcost_fmt=\"%ld\" -Dcost_max=ULONG_MAX
endif
ifneq (,$(findstring long long,$(MFLAGS)))
        override MFLAGS+=-Dcost_fmt=\"%lld\" -Dcost_max=LLONG_MAX
endif
ifneq (,$(findstring unsigned long long,$(MFLAGS)))
        override MFLAGS+=-Dcost_fmt=\"%lld\" -Dcost_max=ULLONG_MAX
endif
ifneq (,$(findstring float,$(MFLAGS)))
        override MFLAGS+=-Dcost_fmt=\"%f\" -Dcost_max=FLT_MAX
endif
ifneq (,$(findstring double,$(MFLAGS)))
        override MFLAGS+=-Dcost_fmt=\"%f\" -Dcost_max=DBL_MAX
endif
ifneq (,$(findstring long double,$(MFLAGS)))
        override MFLAGS+=-Dcost_fmt=\"%Lf\" -Dcost_max=LDBL_MAX
endif
于 2012-05-01T16:01:16.807 に答える