2

O?=2Makefileに次のコードがありますが、実行できるコマンドではないというエラーが表示されsh -cます。私はここで何が間違っているのですか?

gcc:
    O?=2
    @if test -z "$(DEBUG)" ; then \
      g++ -O${O} *.c -o palindrome ; \
    fi

ユーザーが指定しなかった場合に設定Oしてから、パリンドローム実行可能ファイルをビルドしようとしています。2


正確なエラー:

$ make gcc
O?=2
/bin/sh: O?=2: command not found
make: *** [gcc] Error 127
$
4

2 に答える 2

2

この行O?=2は割り当てではなく、ターゲットを再構築するために実行されるコマンドgccです。これは、それについて何も知らない$(SHELL)に供給されることを意味します。変数の割り当てが必要な場合は、コマンドの一部としてではなく、単独でオンラインにします。

O?=2

gcc:
    @if test -z "$(DEBUG)" ; then \
        g++ -O${O} *.c -o palindrome ; \
    fi

を使用できますO = 2。ユーザーがコマンドラインで値を指定すると、値が上書きされます。

make O=1

-O1最適化に使用します。

于 2012-11-04T20:52:51.763 に答える
2

コマンドの外に移動して、シェルではなく「make」で処理されるようにします。

O?=2
gcc:
    @if test -z "$(DEBUG)" ; then \
      g++ -O${O} *.c -o palindrome ; \
    fi
于 2012-11-04T20:51:06.337 に答える