gpt4 book ai didi

c++ - Makefile 不更新一个特定的文件

转载 作者:行者123 更新时间:2023-11-30 05:04:39 25 4
gpt4 key购买 nike

我有一个生成文件,它适用于所有其他文件,但不适用于 main.cpp 文件。当我更改 main.cpp 文件时,它不会更新 main.o

这是生成文件:

CXX = g++
SRCF = main.cpp Animal.cpp
SRC = $(addprefix src/, $(SRCF))

VER = Debug
CXXFLAGS = -Wall -std=c++17
EXE = Animal
OBJF = $(subst .cpp,.o, $(SRCF))
OBJ = $(addprefix src/obj/, $(OBJF) )
#PKG = `pkg-config --libs --cflags sdl2`


$(VER)/$(EXE) : $(OBJ)
$(CXX) $(CXXFLGS) -o $@ $< $(PKG)

src/obj/%.o:src/%.cpp src/%.h
$(CXX) $(CXXFLGS) -c -o $@ $< $(PKG)

clean:
rm -rf $(EXE) $(OBJ)

print-% : ; @echo $* = $($*)

当我更改 Animal.hAnimal.cpp 时,它会更新 Animals.oAnimal 可执行文件.但为什么它main 不起作用??我在这一行指定了如何更新 main.o :-

src/obj/%.o:src/%.cpp src/%.h
$(CXX) $(CXXFLGS) -c -o $@ $< $(PKG)

请帮助我并提前致谢:)

最佳答案

Introduction to Pattern Rules GNU Make 手册部分:

In order for the pattern rule to apply, its target pattern must match the file name under consideration and all of its prerequisites (after pattern substitution) must name files that exist or can be made.

因此,如果没有src/main.h(或无法制作),下面的模式规则将不会匹配到src/obj/main.o:

src/obj/%.o: src/%.cpp src/%.h
$(CXX) $(CXXFLGS) -c -o $@ $< $(PKG)

您需要一个没有 src/%.h 先决条件的额外模式规则:

 src/obj/%.o: src/%.cpp
$(CXX) $(CXXFLGS) -c -o $@ $< $(PKG)

关于c++ - Makefile 不更新一个特定的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48772409/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com