C++ 当我们重复makeall命令时会发生什么?

C++ 当我们重复makeall命令时会发生什么?,c++,c,makefile,dependencies,dependency-graph,C++,C,Makefile,Dependencies,Dependency Graph,我试图理解makefile是如何工作的。这是一个示例生成文件: all: prog x.o: x.cpp globals.hh $(CC) -c x.cpp y.o: y.cpp globals.hh $(CC) -c y.cpp prog: x.o y.o $(LD) -o prog x.o y.o -lc 如果我做了make file,然后在x.cpp中做了一些更改,然后重复make all,将重新运行哪些命令 据我所知,将重新运行以下命令: $(CC)-cx.cp

我试图理解makefile是如何工作的。这是一个示例生成文件:

all: prog
x.o: x.cpp globals.hh
    $(CC) -c x.cpp
y.o: y.cpp globals.hh
    $(CC) -c y.cpp
prog: x.o y.o
    $(LD) -o prog x.o y.o -lc
如果我做了
make file
,然后在
x.cpp
中做了一些更改,然后重复
make all
,将重新运行哪些命令

据我所知,将重新运行以下命令:

$(CC)-cx.cpp

-o prog x.o y.o-lc

如果我改为更改headers文件,我想当我再次生成all时,这三个文件都会重新运行

我说得对吗?顺序是什么

此外,我还试图理解makefile的依赖关系图是什么样子的。我知道x.o,y.o和prog都是这里的目标。但我的逻辑有意义吗?

将不会重新运行

创建
x.o
y.o
prog
时,这些文件都将比各自的输入文件更新

make
不会重新生成比其输入更新的文件,因此不会重新运行任何命令

从:

扩展描述

make实用程序尝试执行所需的操作,以确保指定的目标是最新的。如果目标存在且比其所有依赖项都新,或者如果目标已通过当前调用make更新(无论目标是否存在或存在时间长短),则应将其视为最新的。如果目标存在,与一个或多个先决条件的使用期限相同,并且比其他先决条件(如果有)更新,则也可以认为该目标是最新的。make实用程序应将所有先决条件本身视为目标,并递归地确保它们是最新的,并按照它们在规则中出现的顺序进行处理。make实用程序应使用文件的修改次数来确定相应的目标是否过期

为确保目标是最新的,make应确保目标的所有先决条件都是最新的,然后检查目标本身是否是最新的。如果目标不是最新的,则应通过执行规则的命令(如有)来更新目标。如果目标成功更新后,目标不存在,则该目标应被视为比其作为先决条件的任何目标更新

如果存在目标,且目标既没有目标规则也没有推理规则,则该目标应视为最新的。如果试图确保目标是最新的,但目标不存在,且目标既没有目标规则也没有推理规则,则为错误

没有一个将重新运行

创建
x.o
y.o
prog
时,这些文件都将比各自的输入文件更新

make
不会重新生成比其输入更新的文件,因此不会重新运行任何命令

从:

扩展描述

make实用程序尝试执行所需的操作,以确保指定的目标是最新的。如果目标存在且比其所有依赖项都新,或者如果目标已通过当前调用make更新(无论目标是否存在或存在时间长短),则应将其视为最新的。如果目标存在,与一个或多个先决条件的使用期限相同,并且比其他先决条件(如果有)更新,则也可以认为该目标是最新的。make实用程序应将所有先决条件本身视为目标,并递归地确保它们是最新的,并按照它们在规则中出现的顺序进行处理。make实用程序应使用文件的修改次数来确定相应的目标是否过期

为确保目标是最新的,make应确保目标的所有先决条件都是最新的,然后检查目标本身是否是最新的。如果目标不是最新的,则应通过执行规则的命令(如有)来更新目标。如果目标成功更新后,目标不存在,则该目标应被视为比其作为先决条件的任何目标更新

如果存在目标,且目标既没有目标规则也没有推理规则,则该目标应视为最新的。如果试图确保目标是最新的,但目标不存在,且目标既没有目标规则也没有推理规则,则为错误


也可以看到这一点:它可能是相关的:你读过一些关于你的C++编译器吗?也可以看到这是相关的:你读过一些关于你的C++编译器吗?