7

私はいくつかのCおよびC++プロジェクトを持っており、それらはすべて私が今しばらく使用している基本構造に従います。私のソースファイルはにsrc/*.c、中間ファイルはにobj/*.[do]、そして実際の実行可能ファイルはトップレベルディレクトリにあります。

私のmakefileは、おおよそこのテンプレートに従います。

# The final executable
TARGET := something
# Source files (without src/)
INPUTS := foo.c bar.c baz.c

# OBJECTS will contain: obj/foo.o obj/bar.o obj/baz.o
OBJECTS := $(INPUTS:%.cpp=obj/%.o)
# DEPFILES will contain: obj/foo.d obj/bar.d obj/baz.d
DEPFILES := $(OBJECTS:%.o=%.d)

all: $(TARGET)

obj/%.o: src/%.cpp
    $(CC) $(CFLAGS) -c -o $@ $<

obj/%.d: src/%.cpp
    $(CC) $(CFLAGS) -M -MF $@ -MT $(@:%.d=%.o) $<

$(TARGET): $(OBJECTS)
    $(LD) $(LDFLAGS) -o $@ $(OBJECTS)

.PHONY: clean
clean:
    -rm -f $(OBJECTS) $(DEPFILES) $(RPOFILES) $(TARGET)

-include $(DEPFILES)

今、私はこれをDebianシステム用にパッケージ化しているところです。私はdebuildDebianソースパッケージのpbuilderビルドとバイナリパッケージのビルドに使用しています。このdebuildステップではcleanターゲットを実行するだけで済みますが、これでも依存関係ファイルが生成されて含まれます。

要するに、私の質問は本当にです:私が望むのはターゲットを実行することだけであるときに、makeが依存関係を生成するのをどうにかして防ぐことができますか?clean

4

1 に答える 1

9

-include解決策は簡単です。クリーンな状態でファイルを生成しないでください。

ifneq ($(MAKECMDGOALS),clean)
    -include $(DEPFILES)
endif
于 2010-05-05T12:43:27.687 に答える