2

GNU makefile でばかげた問題に直面しています。ac プログラムをビルドするために 2 つのターゲットを定義したいと考えています。1 つはデバッグあり、もう 1 つはなしです。

runNoDebug: setNoDeb objs runMe

runDebug: setDeb objs runMe

setNoDeb:
     {EXPORT} MyDEBUG= -O3

setDeb:
     {EXPORT} MyDEBUG="-DDEBUG=1 -g"

objs: cFiles
    $(CC) -o $@ $^ $(cFiles) $(CFLAGS) $(LIBS) $(MYDEBUG)

runme: objs
    ./oo

このメイクファイルを実行するとエラーが発生し、デバッグを設定するコマンドがサブシェルで実行され、エラーが発生します。「エクスポート」が追加された場合、変数はそのサブシェルで定義されます。

オブジェクトの構築中に使用されるメイクファイル自体でこの変数を定義したいと思います。

出来ますか?または、「objs: cFiles」ターゲットを複製する必要がありますか?

4

1 に答える 1

2

ターゲット固有の変数値が必要です:

この機能により、make が現在ビルドしているターゲットに基づいて、同じ変数に異なる値を定義できます。

runNoDebug: setNoDeb runMe

runDebug:   setDeb runMe

setNoDeb:   CFLAGS += -O3
setNoDeb:   objs

setDeb: CPPFLAGS += -DDEBUG=1
setDeb: CFLAGS += -g
setDeb: objs

objs: $(cFiles)
    $(CC) $(CFLAGS) $^ $(LIBS) -o $@
于 2014-03-29T23:24:15.203 に答える