我的程序有一个 makefile,但每次运行它时我都会重新编译所有内容,即使我没有修改任何内容。
每次我运行 make
它都会重新编译 simHwIntf.cpp showHelp.cpp
和 sendFromFile.cpp
这是我的制作文件:
IDIR = inc
LDIR = -L/usr/lib/x86_64-linux-gnu/
SDIR = src
ODIR = obj
BINDIR = bin
LDLIBS = -luhd
OBJ = $(patsubst %,$(ODIR)/%,$(O_FILES))
CC = g++
CFLAGS = -Wall -std=c++11 -I $(IDIR) #-Werror
BINARIES= main
C_FILES = simHwIntf.cpp showHelp.cpp sendFromFile.cpp
H_FILES = simHwIntf.h
O_FILES = $(C_FILES:.cpp=.o)
all: $(BINARIES)
@echo "Make file executed"
$(BINARIES): $(O_FILES)
$(CC) $(CFLAGS) -o $(BINDIR)/$@ $(OBJ) $(LDIR) $(LDLIBS)
fileCreator: fileCreator.o
$(CC) $(CFLAGS) -o $(BINDIR)/$@ $(ODIR)/fileCreator.o
fileHandler: fileHandler.o
$(CC) $(CFLAGS) -o $(BINDIR)/$@ $(ODIR)/fileHandler.o
backYard: backYard.o
$(CC) $(CFLAGS) -o $(BINDIR)/$@ $(ODIR)/backYard.o
%.o: $(SDIR)/%.cpp $(IDIR)/$(H_FILES)
$(CC) $(CFLAGS) -c -o $(ODIR)/$@ $<
clean:
-rm -rf $(ODIR)/*.o *~
distclean: clean
-rm -rf $(BINDIR)/*
每次在shell中的输出是:
g++ -Wall -std=c++11 -I inc -c -o obj/simHwIntf.o src/simHwIntf.cpp
g++ -Wall -std=c++11 -I inc -c -o obj/showHelp.o src/showHelp.cpp
g++ -Wall -std=c++11 -I inc -c -o obj/sendFromFile.o src/sendFromFile.cpp
g++ -Wall -std=c++11 -I inc -o bin/main obj/simHwIntf.o obj/showHelp.o obj/sendFromFile.o -L/usr/lib/x86_64-linux-gnu/ -luhd
Make file executed
我已经搜索并阅读了这个:( How do I make Makefile to recompile only changed files? ) 但没有太大帮助。
有人可以帮我解决这个问题吗?
我对目录有疑问,每次运行 make 时可能会重新创建一个或多个目录,这会导致内部的所有内容对编译器来说看起来都是新的。
谢谢
最佳答案
您可以通过回显更改的依赖项来查看是什么触发了构建。将此添加到您的 %.o 目标:
@echo [triggered by changes in $?]
您还应该使用 VPATH 特殊变量,而不是在您的 %.o 目标中指定源路径。参见 GNU make VPATH documentation
关于c++ - 重新编译未修改的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37609084/