Makefile,更好理解规则
Makefile, better understanding rules
A prerequisite is a file that is used as input to create the target. A
target often depends on several files.
如果我的源文件已经包含 header,我应该在规则中列出 header 吗?
src.c
#include <stdio.h>
#include "myheader.h"
int main()
{
printMessage();
return 0;
}
myheader.h
void printMessage()
{
printf("a message to screen\n");
}
生成文件
src : src.o
cc -o src src.o
src.o : src.c
cc -c src.c
如果我在先决条件中添加 myheader.h
它不会改变任何内容,相同的消息会打印到屏幕上。如果明确包含 header,它是否应该出现在先决条件中?
是的,你应该。
make 程序使用文件列表来确定依赖项是否已更改,结果是否应重建目标。它需要您明确指定该依赖项。
它看不到包含,它只看到你指定的规则。因此,理论上有可能您以需要 src.o
的 re-compilation 的方式更改 header,但 make
不会知道您这样做了,除非您告诉它小心。
头文件应该包含在依赖列表中。
第一次使用 make
构建程序时,无论是否包含 myheader.h
作为依赖项,它的编译效果都是一样的。不同之处在于其中一个文件发生更改时会发生什么。
如果您再次 运行 make
而不做任何更改,它会说 "src" 是最新的并且不会编译任何东西。但是,如果您要修改 myheader.h
而 没有 将其作为依赖项包含,那么 make
会说目标是最新的。它不会查看源文件来查看它包含哪些文件。 make
实用程序对 C 或 C++ 源代码(或任何其他源代码)一无所知。它 仅 查看给定文件是否有更改,而不查看其内容。
当您将 myheader.h
作为依赖项包含时,如果您稍后修改该文件,则 运行ning make
将重建程序。
如果您想知道给定源文件所依赖的所有非系统头文件,您可以运行 gcc 加上-MM
选项。这将输出一个 make 规则,列出源文件的头依赖项。
例如,如果您 运行 gcc -MM src.c
,您将得到以下输出:
src.o: src.c myheader.h
然后您可以将其包含在您的 makefile 中。
A prerequisite is a file that is used as input to create the target. A target often depends on several files.
如果我的源文件已经包含 header,我应该在规则中列出 header 吗?
src.c
#include <stdio.h>
#include "myheader.h"
int main()
{
printMessage();
return 0;
}
myheader.h
void printMessage()
{
printf("a message to screen\n");
}
生成文件
src : src.o
cc -o src src.o
src.o : src.c
cc -c src.c
如果我在先决条件中添加 myheader.h
它不会改变任何内容,相同的消息会打印到屏幕上。如果明确包含 header,它是否应该出现在先决条件中?
是的,你应该。
make 程序使用文件列表来确定依赖项是否已更改,结果是否应重建目标。它需要您明确指定该依赖项。
它看不到包含,它只看到你指定的规则。因此,理论上有可能您以需要 src.o
的 re-compilation 的方式更改 header,但 make
不会知道您这样做了,除非您告诉它小心。
头文件应该包含在依赖列表中。
第一次使用 make
构建程序时,无论是否包含 myheader.h
作为依赖项,它的编译效果都是一样的。不同之处在于其中一个文件发生更改时会发生什么。
如果您再次 运行 make
而不做任何更改,它会说 "src" 是最新的并且不会编译任何东西。但是,如果您要修改 myheader.h
而 没有 将其作为依赖项包含,那么 make
会说目标是最新的。它不会查看源文件来查看它包含哪些文件。 make
实用程序对 C 或 C++ 源代码(或任何其他源代码)一无所知。它 仅 查看给定文件是否有更改,而不查看其内容。
当您将 myheader.h
作为依赖项包含时,如果您稍后修改该文件,则 运行ning make
将重建程序。
如果您想知道给定源文件所依赖的所有非系统头文件,您可以运行 gcc 加上-MM
选项。这将输出一个 make 规则,列出源文件的头依赖项。
例如,如果您 运行 gcc -MM src.c
,您将得到以下输出:
src.o: src.c myheader.h
然后您可以将其包含在您的 makefile 中。