4

make installファイルをターゲットフォルダーにコピーするだけの単純なメイクファイルプロジェクトがあります。

all:
   @echo "Nothing to build"

install:
   cp ./*.wav /usr/share/snd

my_custom_target:
   @echo "For testing purposes"

ただし、ターゲット (つまり、clean、all、install、my_custom_target など) をビルドしようとするたびに、すべてのターゲットが " Nothing to be done for 'clean'"、" Nothing to be done for 'all'" などをエコーするだけです。makefile プロジェクトは、少なくとも何かがビルドされることを期待していると思います。 (つまり、C/C++ ファイルなど)。

これを進める方法について何か提案はありますか?

ありがとうございました。

4

1 に答える 1

7

これはmake、Makefileを見つけることができないか、正しく解析できないことを示しているようです。ファイルの名前は何ですか?

また、各ルールのコマンド(のようなcp ./*.wav /usr/share/snd)の前にスペースではなく実際のタブ文字が付いていることを確認してください。貼り付けたサンプルでは、​​接頭辞として3つのスペースが付いてmakeいますが、正しく解析するには、実際のタブ文字を接頭辞として付ける必要があります。

もう1つ確認する必要があるのは、、、または。という名前allのファイルがあるかどうかです。Makeは、CファイルとC++ファイルのどちらがビルドされているかを気にしません。ルールはあなたが望むことを何でもすることができます。ただし、ルールと同じ名前のファイルがあるかどうか、およびそのファイルがルールの依存関係よりも新しいかどうかを確認します。ファイルがあり、それがすべての依存関係よりも新しい場合(または、この例のように依存関係がない場合)、ファイルは何もすることがないと判断します。これを回避するには、これらが偽のターゲットであり、ビルドされる実際のファイルに対応していないことを示す宣言を追加します。次に、同じ名前の最新のファイルがあるかどうかに関係なく、常にこれらのレシピを実行します。installmy_custom_target.PHONYmake

.PHONY: all install my_custom_target
于 2012-09-25T16:08:33.653 に答える