22

オープンソースプロジェクトを構築しているときに、次のエラーが発生しました。

make  subdir=manual -C manual ..=../ subdir_lib
Makefile:235: *** mixed implicit and normal rules.  Stop.

Makefileの235行目から次のようにコーディングします。

235: $(objpfx)stubs ../po/manual.pot $(objpfx)stamp%:
236:    $(make-target-directory)
237:    touch $@
4

7 に答える 7

21

このエラーメッセージは、ルール宣言の左側にパターンルール出力(を含む%)のように見えるものと、通常の出力(no )のように見えるものがある場合にGNUmakeによって出力されます。例えば:%:

%.pat normal:
        @echo $@

したがって、Makefileの235行目で、その構成に「似ている」ものをまとめることができました。エラーを回避するには、その宣言を修正します。ほとんどの場合、宣言を2つに分割します。

%.pat:
        @echo $@

normal:
        @echo $@

このエラーを生成した完全なmakefileを確認せずに、私たちが提供できるアドバイスはこれ以上ありません。

于 2012-12-19T05:09:58.990 に答える
15

私は後継者に思い出させるためにここにいます、あなたの道をチェックしてください、それにスペースはありますか?私たちはこれで午後中ずっと無駄になりました!

于 2014-12-09T09:01:51.950 に答える
10

私の場合、エラーは、依存関係の行の最後に、ばかげて無関係なものを置くことによるものでした。

%.o: %.cpp:
     g++ -c -o %@ $<
于 2016-02-22T19:43:32.687 に答える
5

自分でこれを持っていて、変数定義の「/」の後の隠されたスペースが原因でした。

#accidental/invisible space left after the final "/" i.e...
DESTDIR=path/to/the/destination/directory/ 
#                            ...just here ^

#rule to make copies of text files...
$(DESTDIR)%.txt:$(SRCDIR)%.txt
于 2018-04-23T10:52:58.647 に答える
3

この質問で説明されている問題は、ここで報告されています http://sourceware.org/bugzilla/show_bug.cgi?id=11873

エリックが提案したように、修正は確かにルールを分割することでした。

于 2013-02-25T19:13:26.653 に答える
1

Eric Melskiの回答を完了すると、これを実行して、どこでもコードが重複しないようにすることができます。

define DEFAULTTARGET :=
    @echo $@
endef

%.pat:
    ${DEFAULTTARGET}

normal:
    ${DEFAULTTARGET}
于 2019-10-13T00:43:33.803 に答える
0

パスを確認し、プロジェクトを保存した場所を確認してください。ディレクトリの名前にスペースを入れないでください。別のソースからインポートした場合は、システムで生成されたプロジェクトディレクトリファイルと一緒に保存します

于 2021-03-10T10:05:08.707 に答える