问题如标题中所述。每当我键入make
时,即使没有对代码进行任何处理,这些命令也都在运行
g++ -o ./bin/prog1 ./obj/prog1.o -I./include
g++ -o ./bin/prog2 ./obj/prog2.o -I./include
Makefile位于项目文件夹的根目录,其余文件分别位于include
,obj
,src
和bin
文件夹中。这是Makefile代码:
IDIR=./include
ODIR=./obj
SRCDIR=./src
BINDIR=./bin
CC=g++
CFLAGS=-I$(IDIR)
_DEPS =
DEPS = $(patsubst %,$(IDIR)/%,$(_DEPS))
_OBJ1 = prog1.o
OBJ1 = $(patsubst %,$(ODIR)/%,$(_OBJ1))
_OBJ2 = prog2.o
OBJ2 = $(patsubst %,$(ODIR)/%,$(_OBJ2))
_SRC = prog1.cpp prog2.cpp
SRC = $(patsubst %,$(SRCDIR)/%,$(_SRC))
$(ODIR)/%.o: $(SRCDIR)/%.cpp $(DEPS)
$(CC) -c -o $@ $< $(CFLAGS)
all: $(OBJ1) $(OBJ2)
$(CC) -o $(BINDIR)/prog1 $(OBJ1) $(CFLAGS)
$(CC) -o $(BINDIR)/prog2 $(OBJ2) $(CFLAGS)
clean:
rm -f $(ODIR)/*.o $(BINDIR)/*
.PHONY: all clean
任何帮助将不胜感激。
将all
标记为.PHONY
表示目标将始终被视为脏目标,并且将重新评估其配方。如果您不想这样做,请将这两个程序移到显式目标中:
prog1: $(OBJ1)
$(CC) -o $(BINDIR)/prog1 $(OBJ1) $(CFLAGS)
prog2: $(OBJ2)
$(CC) -o $(BINDIR)/prog2 $(OBJ2) $(CFLAGS)
all: prog1 prog2
现在重新制作all
目标将确保prog1
和prog2
是最新的,但不再运行其他命令。