私は小さなプロジェクトを構築し、それを掃除するためのルールを含むMakefileを持っています。たとえば:Makefileで 'build'と 'clean'の 'rebuild'ルールを作るには?
CC:=gcc
LD:=gcc
SOURCES:=$(wildcard src/*.c)
OBJS:=$(SOURCES:src/%.c=build/%.o)
TARGET:=bin/program
all: $(TARGET)
$(TARGET): $(OBJS)
@mkdir -p bin
$(LD) $+ -o [email protected]
build/%.o: src/%.c
@mkdir -p build
$(CC) $+ -c -o [email protected]
clean:
rm -rf $(OBJS)
rm -rf $(TARGET)
rmdir bin
rmdir build
.PHONY: clean all
私は今、そのためにclean
とall
を実行することになり、ルールrebuild
の作成に興味があります。私は正しい順序をいかに適切に達成しているかわかりません。
私が見た解決策は私の知るところでは間違っています。
rebuild: clean all
.PHONY: rebuild
実際に依存関係が表示される順番に実行されるという保証はないため、当然間違っています。 all
はclean
より前に実行されます。
注文のみの依存関係を示唆する回答があります。
rebuild: | clean all
.PHONY: rebuild
私の知る限り、これは問題を解決しません。 a: | b c
と言う場合、a
はb
とc
に依存しますが、b
またはc
を入力した場合は、強制的にa
ルールを実行するわけではありません。それはとの関係がありません。は依存関係です。私は今見
唯一のオプションは、私は本当にそのような単純な何かを行うための新しいメイクのインスタンスを起動避けたい
rebuild : clean
make build
を持つことで、メイクの新しいインスタンスを起動しています!
私はいくつかreasearchを行った。私は同様の質問を見たことがあるが、は正しいと答えた答え。私のknolwedgeには、ターゲットを.PHONY
にするか、注文のみの依存関係を使用することは解決策ではありません。 (それが有効になって並列処理-j
なし、である)シリアルを実行しているときに
rebuild: clean all
all
がclean
前にビルドすることができること: