gpt4 book ai didi

c++ - 如果更改,GNU make 不会正确构建 header

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

我有这个生成文件:

CC=g++

CFLAGS=-c -Wall

all: hello

hello: main.o client.o
$(CC) main.o client.o -o hello

client.o: client.cpp client.h
$(CC) $(CFLAGS) client.cpp -o client.o

main.o: main.cpp
$(CC) $(CFLAGS) main.cpp -o main.o

clean:
rm -rf *o hello

每当我在 hello.h 中进行更改时,client.o 都会在我执行 make 时重建。但是当我尝试生成的可执行文件 ./hello 时,更改似乎并没有发生。

如果我将 client.h 添加到 main.o: 规则中,更改只会反射(reflect)在 ./hello 上

main.o: main.cpp client.h
$(CC) $(CFLAGS) main.cpp -o main.o

这将使维护我的代码变得非常困难,知道如何解决这个问题吗?

编辑:尝试了这个改变:

main.o: main.cpp
$(CC) $(CFLAGS) -MD main.cpp -o main.o

但没有帮助。

更新(最终版本):

TARGET = hello

CC = g++

CPPFLAGS = -Wall -MP -MD

LINKER = g++ -o
LFLAGS = -Wall

SRCDIR = src
OBJDIR = obj
BINDIR = bin

SOURCES := $(wildcard $(SRCDIR)/*.cpp)
INCLUDES := $(wildcard $(SRCDIR)/*.h)
OBJECTS := $(SOURCES:$(SRCDIR)/%.cpp=$(OBJDIR)/%.o)
DEPS := $(SOURCES:$(SRCDIR)/%.cpp=$(OBJDIR)/%.d)

RM = rm -rf

DIR_GUARD = mkdir -p $(@D)

$(BINDIR)/$(TARGET): $(OBJECTS)
@$(DIR_GUARD)
@$(LINKER) $@ $(LFLAGS) $(OBJECTS)
@echo "Linking complete!"

$(OBJECTS): $(OBJDIR)/%.o: $(SRCDIR)/%.cpp
@$(DIR_GUARD)
@$(CC) $(CPPFLAGS) -c $< -o $@
@echo "Compiled "$<" successfully!"

-include $(DEPS)

.PHONEY: clean
clean:
@$(RM) $(OBJDIR)/* $(BINDIR)/*
@echo "Cleanup complete!"

感谢大家的帮助,你们真的很棒。

最佳答案

问题是 main.oclient.h 的依赖性没有在您的 Makefile 中指定。使用:

main.o: main.cpp client.h
$(CC) $(CFLAGS) main.cpp -o main.o

关于c++ - 如果更改,GNU make 不会正确构建 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32316628/

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