尽管配方'all'被标记为虚假,但每次都会重新生成多个程序的Makefile

问题描述 投票:0回答:1

问题如标题中所述。每当我键入make时,即使没有对代码进行任何处理,这些命令也都在运行

g++ -o ./bin/prog1 ./obj/prog1.o -I./include
g++ -o ./bin/prog2 ./obj/prog2.o -I./include

Makefile位于项目文件夹的根目录,其余文件分别位于includeobjsrcbin文件夹中。这是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

任何帮助将不胜感激。

c++ makefile
1个回答
0
投票

all标记为.PHONY表示目标将始终被视为脏目标,并且将重新评估其配方。如果您不想这样做,请将这两个程序移到显式目标中:

prog1: $(OBJ1)
    $(CC) -o $(BINDIR)/prog1 $(OBJ1) $(CFLAGS)

prog2: $(OBJ2)
    $(CC) -o $(BINDIR)/prog2 $(OBJ2) $(CFLAGS)

all: prog1 prog2

现在重新制作all目标将确保prog1prog2是最新的,但不再运行其他命令。

© www.soinside.com 2019 - 2024. All rights reserved.