%ルールにディレクトリの依存関係を指定:Cプロジェクトについて非常に奇妙なメイクの行動私は簡単なメイクファイルの以下の非常に奇妙な行動観察
をさんは、私がコンパイルするためのn> = 2の.cファイルを持っているとしましょうディレクトリに保存します。
OBJDIR = obj
all: $(OBJDIR)/a.o $(OBJDIR)/b.o
$(OBJDIR):
mkdir $(OBJDIR)
$(OBJDIR)/%.o: %.c $(OBJDIR)
gcc -c $< -o [email protected]
だから、a.oとb.oがコンパイルされ、新しいフォルダOBJに置かれている必要があります。たとえば
あなたは
私のメイクファイルがあるコンパイルするためa.cとb.cを持っていると仮定します。 同じフォルダに.cと.oファイルを置くのが面倒だと思っています。また、何かの理由でgitを使ってプロジェクトをアップロードすると、空のフォルダを追跡しないため、フォルダが存在しない場合は作成します。
私のWindowsマシンでは正常に動作し、私がしたいことをします。
make
mkdir obj
gcc -c a.c -o obj/a.o
gcc -c b.c -o obj/b.o
make
make: Nothing to be done for 'all'.
しかし、私のLinuxマシン上で、次のことを行います。
make
mkdir obj
gcc -c a.c -o obj/a.o
gcc -c b.c -o obj/b.o
make
gcc -c a.c -o obj/a.o
make
gcc -c b.c -o obj/b.o
make
gcc -c a.c -o obj/a.o
make
gcc -c b.c -o obj/b.o
私はここでしかコマンドを作成しました。他の行はmakeの仕事です。私はサイクリングの行動がかなり迷惑であることを知ります。
どうしてですか?
「エレガントな回避策がありました」でなければなりません。あなたは[注文のみの前提条件](https://www.gnu.org/software/make/manual/html_node/Prerequisite-Types.html)を考えているかもしれません。 – kaylum