什么是'制作目标'?

时间:2010-02-16 04:30:04

标签: build-process build makefile

为什么我需要在构建源代码之前创建make target

更具体地说,究竟是什么make target

4 个答案:

答案 0 :(得分:24)

Makefile看起来像这样:

all: mybinary

mybinary: files.o it.o depends.o on.o
[tab]$(CC) $(CFLAGS) files.o it.o depends.o on.o -o mybinary

files.o: files.c files.h
[tab]$(CC) -c $(CPPFLAGS) $(CFLAGS) $< -o $@

...

这意味着,当您键入make all(简写只是键入make)时,它将确保mybinary目标或文件是最新的。要做到这一点,它需要确保mybinary比所有files.o it.o depends.o和on.o更新。如果没有,那么它使用下一行指定的shell命令来构建mybinary。但在此之前,它首先确保files.o等是最新的。这意味着它们必须比files.c和files.h更新。如果没有,那么它使用下一行指定的shell命令来构建files.o。一旦所有* .o文件都是最新的,它就可以构建mybinary。一旦构建了mybinary,就会满足所有目标。

目标通常只是文件。块的格式为:

target: list of dependency files
[tab]shell commands to build target if it's older than any of its dependencies
[tab]more shell commands
[tab]still more

还可以使用通配符指定目标,例如%.c表示您要调用*.c的shell中的内容。

某些目标是“虚假”目标,这意味着它们与任何真实文件都不对应。 “所有”目标就是这种。 “清洁”目标(make clean)也是如此。等等。您并不真正需要或想要构建名为“all”或“c​​lean”的文件。有多种方法可以指定目标是虚假的。

出现在Makefile中的第一个目标是只需键入make即可调用的目标。一种惯例是将此目标命名为“全部”。因此,make将与make all相同。

答案 1 :(得分:5)

'make target'基本上是您想要重建的文件。

Make无法理解您想要构建的内容,因此您必须隐式或明确地告诉它应该构建什么。通常,文件中的第一个目标是诸如“all”之类的名称,如果运行'make'而没有任何显式目标,它将构建makefile中列出的第一个目标。但是,一些makefile没有指定任何目标;那么你必须在命令行中指定一个。或者,如果您不希望构建默认目标,则必须指定要构建的目标。

就GNU make而言,目标也可以是“假的”。也就是说,它是一个不存在的名称,并且规则不会创建它,但它(虚假目标)依赖于许多其他具有与之关联的规则的文件。实际上,'all'目标通常是假目标 - 大多数目录中都没有名为'all'的文件。

答案 2 :(得分:2)

makefile通常会包含制作程序,安装程序,后续清理以及其他内容的代码。

所以单词target可以是各种关键字,例如allinstallclean等。

这是一种说法某事的方式。 make all暗示做所有事情

答案 3 :(得分:1)

make是一个常见的开发工具,它检查源代码文件和从它们生成的目标代码之间的文件日期,并编译源更新的文件。它通过使用一个名为makefile的文件来完成此操作,该文件列出了需要比较的文件。

标准语法为make /f makefile myprog.exe

这就是说使用makefile中的文件列表构建myprog.exe。 makefile默认为makefile.mak,因此如果您使用该名称,则不必在命令行中指定它。

myprog.exe这里被称为目标。一个技巧是你可以在makefile中输入一个不存在的文件的构建指令列表。如果您说要构建该目标,它将运行这些命令。通常,您会看到类似make clean的内容,其中包含临时文件已删除。