我有一个makefile用于我的程序,但每次运行它都会重新编译,即使我没有修改任何内容.每次我运行make
它重新编译simHwIntf.cpp showHelp.cpp
和sendFromFile.cpp
这是我的make文件:
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)/*
Run Code Online (Sandbox Code Playgroud)
每次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
Run Code Online (Sandbox Code Playgroud)
我已经搜索并阅读了这个:( 如何使Makefile重新编译只有更改的文件?)但没有多大帮助.
有谁可以帮我一个忙吗?
我对目录有疑问,每次运行make时可能会重新创建一个或多个目录,这会导致内部的所有内容看起来像编译器的新内容.
谢谢
您可以通过回显更改的依赖项来查看触发构建的内容.将其添加到%.o目标:
@echo [triggered by changes in $?]
Run Code Online (Sandbox Code Playgroud)
您还应该使用VPATH特殊变量,而不是在%.o目标中指定源路径.请参阅GNU make VPATH文档