C++ 对makefile无法识别的文件的更改

C++ 对makefile无法识别的文件的更改,c++,shell,makefile,C++,Shell,Makefile,因为每次我对一个文件进行更改,然后像没有做任何更改一样“使”它时,我的makefile是如何编写的。例如 当我对Unit.cpp进行更改时,“make”会收到此消息 make:对“所有人”都不做任何事 目前,我必须先进行“清理”,然后再进行“制作”,以便识别更改。我知道这可能是一种愚蠢的做法,我想知道如何修改我的make文件,这样每次修改时就不需要重新编译所有的文件 #makefile # \ for line break # this is variable for which compile

因为每次我对一个文件进行更改,然后像没有做任何更改一样“使”它时,我的makefile是如何编写的。例如

当我对Unit.cpp进行更改时,“make”会收到此消息

make:对“所有人”都不做任何事

目前,我必须先进行“清理”,然后再进行“制作”,以便识别更改。我知道这可能是一种愚蠢的做法,我想知道如何修改我的make文件,这样每次修改时就不需要重新编译所有的文件

#makefile
# \ for line break
# this is variable for which compiler to use
CC = g++
CFLAGS = -c -Wall 
OBJFILES = main.o UnitList.o Unit.o  Write.o
# this is the name of target program
TARGET = run

all: $(TARGET) 

$(TARGET): $(OBJFILES)
    $(CC) $(OBJFILES) -o $(TARGET)

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

UnitList.o: 
    $(CC) $(CFLAGS) UnitList.cpp 

Unit.o:
    $(CC) $(CFLAGS) Unit.cpp

Write.o:
    $(CC) $(CFLAGS) Write.cpp

clean:
    rm -f $(OBJFILES) $(TARGET)

您需要列出makefile中的所有依赖项

例如,这:

main.o:
    $(CC) $(CFLAGS) main.cpp
依赖项列表中应包含main.cpp:

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

然后,当您更改main.cpp时,make知道重新生成main.o.

谢谢您的帮助。5分钟后我接受。我的印象是make能够推断出依赖关系?我想不是。或者在某些情况下可以吗?如果您不创建自己的规则,而是让make使用自己的内置规则,那么这些内置规则可以推断出源文件的先决条件。如果您提供自己的规则,那么您必须自己提供依赖项信息。毕竟,您的
main.o
文件可能并不依赖于任何东西,而是完全不同的东西。