我有这个makefile:
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中进行更改时,在执行make时会重建client.o。但是当我尝试生成的可执行文件./hello时,似乎没有发生变化。
如果我将client.h添加到main.o:规则中,那么更改只会反映在./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!"
谢谢大家的帮助,你真的很棒。
答案 0 :(得分:1)
问题在于client.h
中未指定Makefile
对main.o: main.cpp client.h
$(CC) $(CFLAGS) main.cpp -o main.o
的依赖关系。使用:
URLEncoder.encode(arg:String):String