<分区>
我观察到一个简单的 makefile 的以下非常奇怪的行为:
对于一个 C 项目,假设我有 n>=2 个要在目录中编译的 .c 文件。
例如假设你有 a.c 和 b.c 来编译
我的 makefile 是:
OBJDIR = obj
all: $(OBJDIR)/a.o $(OBJDIR)/b.o
$(OBJDIR):
mkdir $(OBJDIR)
$(OBJDIR)/%.o: %.c $(OBJDIR)
gcc -c $< -o $@
所以需要把a.o和b.o编译出来放到一个新的文件夹obj中。 我想这样做是因为我发现将 .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 命令。其他线路是 make 的工作。我发现骑自行车的行为很烦人。
为什么会这样?