5

以下は私のMakefileです:

.PHONY: all

all: /Users/wu/qqaa/homepage\ 1\ 2\ 3/icons\ (a-b)
        @tar cjvf 1.tar.bz2 --exclude=*~ /Users/wu/qqaa/homepage\ 1\ 2\ 3/icons\ \(a-b\)

うまくいきませんでした。問題は、依存関係の括弧です。\前に追加し()も機能しませんでした。エラーは次のとおりです。

make: *** No rule to make target `/Users/wu/qqaa/homepage 1 2 3/icons (a-b)', needed by `all'. Stop

ディレクトリ /Users/wu/qqaa/homepage 1 2 3/icons (ab) は存在します。括弧は依存関係で使用できないようでした。それが正しいか?それとも何かが恋しいですか?

コロンも依存関係で使用できなかったようです。

システムをバックアップするための bash シェル スクリプトを作成しました。バックアップにmakeとを使用しました。tar使用makeするのは、新しいファイルのみを更新し、ディレクトリを tar することです。問題は、多くのファイルの名前にコロンまたは括弧が含まれており、それらが Makefile で特別な意味を持っていることです。その結果、上記の問題が発生します。

どんな助けでも本当に感謝しています。ありがとうございました。

4

2 に答える 2

5

問題は、括弧がアーカイブ メンバーをマークし、エスケープできないように見えることです。通常のトリックは、バックスラッシュ エスケープと変数を使用したエスケープです。

.PHONY : all
leftparen:=(
rightparen:=)
all: /Users/wu/qqaa/homepage\ 1\ 2\ 3/icons\ $(leftparen)a-b$(rightparen)
        @tar cjvf 1.tar.bz2 --exclude=*~ "$@"

この場合、どちらも機能しないため、おそらくこの制限を受け入れるか、GNU make に対してバグを報告する必要があります。

于 2011-11-10T13:03:27.430 に答える
0

私にとっては、Windows で使用していた Makefile でこの問題が発生しました。コンパイラは MinGW64-W32 の 32 ビット バージョンです。

gcc --versionショー: gcc (i686-posix-sjlj-rev0, Built by MinGW-W64 project) 5.1.0

make --versionショー:GNU Make 3.81

変更されたディレクトリをインクルードする必要がある Makefile を作成していました (つまり、32 ビット コンパイラのインクルード ディレクトリは、64 ビット コンパイラのインクルード ディレクトリとは異なります)。次のようなものを含める必要がありました。 -IC:/Program Files (x86)/mingw-w64/gtk+-3.6.4_win32/include/gtk-3.0

例えば。私は同じ問題を抱えていました。コンパイルしようとすると、コンパイラは ( 行 0 または何かでエラーを出しました。私の解決策は簡単でした。次のように二重引用符を使用する必要がありました。

-I"C:/Program Files (x86)/mingw-w64/gtk+-3.6.4_win32/include/gtk-3.0"

二重引用符を使用するとうまくいきました。これにより、プログラムを正常にコンパイルできました。

ここで補足です。通常、Linux では、スペースを含むディレクトリの場合、次のようなものが必要です。

-I"C:/Program\ Files\ (x86)/mingw-w64/gtk+-3.6.4_win32/include/gtk-3.0"

スペースの前に \ を付けます。Makefile で、スペースに \ を使用し、二重引用符を使用すると、プログラムがコンパイルされません。 二重引用符を使用すると、Makefile は \ が実際にはディレクトリ名の一部であると信じていると思います。

コードについては、次のようなものを試してください。

.PHONY: all

all: /Users/wu/qqaa/homepage\ 1\ 2\ 3/icons\ (a-b)
        @tar cjvf 1.tar.bz2 --exclude=*~ "/Users/wu/qqaa/homepage 1 2 3/icons (a-b)"

それでもうまくいかない場合は、次のようなことを試してください。

.PHONY: all

all: /Users/wu/qqaa/homepage\ 1\ 2\ 3/icons\ (a-b)
        @tar cjvf 1.tar.bz2 --exclude=*~ "/Users/wu/qqaa/homepage\ 1\ 2\ 3/icons\ (a-b)"

とにかく、頑張ってください。

于 2015-08-21T21:43:01.320 に答える