C++ Makefile只跟踪第一个文件

C++ Makefile只跟踪第一个文件,c++,makefile,C++,Makefile,我的makefile中有两个.cpp文件: test1.o : test1.cpp g++ test1.cpp -o test1.o test2.o : test2.cpp g++ test2.cpp -o test2.o 在我对test1.cpp和test2.cpp进行更改并在命令行中键入make之后,只重新编译test1.o,而不对test2.o执行任何操作 但是,如果我交换makefile中的两个块,test2.o将自动重新编译,而test1.o将不会

我的makefile中有两个.cpp文件:

test1.o : test1.cpp
        g++ test1.cpp -o test1.o

test2.o : test2.cpp
        g++ test2.cpp -o test2.o
在我对test1.cpp和test2.cpp进行更改并在命令行中键入
make
之后,只重新编译
test1.o
,而不对
test2.o
执行任何操作

但是,如果我交换makefile中的两个块,
test2.o
将自动重新编译,而
test1.o
将不会


似乎我的makefile只跟踪第一个文件。我想知道哪个部分出错。

尝试添加默认目标。一个非常简单的起点:尝试添加一个默认目标。一个非常简单的起点:
all:test1.o test2.o
默认情况下
make
将在makefile中构建第一件事,如果您不告诉它要构建什么

您可以运行
make test1.o test2.o
来专门制作这两个,或者添加一个伪目标,这样默认情况下它将制作
all
——这是许多makefile需要的 使用

使用
.PHONY
告诉Make
all
不是一个真实的文件,因此它不会出现错误行为,以防您出于某种原因拥有一个名为
all
的文件

all: test1.o test2.o
.PHONY: all

默认情况下,
make
将在makefile中构建第一件事,如果您不告诉它要构建什么

您可以运行
make test1.o test2.o
来专门制作这两个,或者添加一个伪目标,这样默认情况下它将制作
all
——这是许多makefile需要的 使用

使用
.PHONY
告诉Make
all
不是一个真实的文件,因此它不会出现错误行为,以防您出于某种原因拥有一个名为
all
的文件

all: test1.o test2.o
.PHONY: all

您可能需要在这些对象上设置一个
-c
标志,因为它们只是构建对象而不是链接。您可能需要在这些对象上设置一个
-c
标志,因为它们只是构建对象而不是链接。