1

src ディレクトリのサブディレクトリにちなんで名付けられた複数のアーティファクトを構築する単純なメイクファイルを作成しようとしています。ここに私のディレクトリ構造があります:

>find .
.
./makefile
./src
./src/binA
./src/binA/main.java
./src/binB
./src/binB/main.cpp
./src/binC
./src/binC/main.scala

ここに私が使用しようとしているメイクファイルがあります。同じルールでパターンとワイルドカードの両方を使用すると、何らかの理由でバイナリ ターゲットが依存関係の拡張を拒否する

>cat makefile
dirs    :=      $(shell find src -mindepth 1 -type d)
all:    $(dirs:src/%=bin/%.exe)
        @echo $(dirs)
bin/%.exe:      src/%/*
        @echo "$@ <-- $^"

私はdirsが適切に設定されていることを知っています

src/binA src/binB src/binC

これは私が得るエラーです

>make
make: *** No rule to make target `bin/binA.exe', needed by `all'.  Stop.

その依存関係をその名前に基づくサブディレクトリの内容に適切に展開する一般的なルールを作成するにはどうすればよいですか

4

1 に答える 1

0

ルールマッチャーをに変更し、その前bin/%.exe: $(wildcard src/%/*)に a を追加することで、これを機能させることができまし.SECONDARYEXPANSION:た。

于 2013-09-14T03:45:28.860 に答える