目标在Makefile中的作用是什么?

时间:2012-07-02 06:26:57

标签: c linux makefile target

我的印象是冒号:的左侧代表target即可执行文件,而右侧代表'依赖',即生成所述文件所需的文件目标。

hello : hello.c
    gcc hello.c -Wall -o hello

所以,我认为目标'hello'是最终可执行文件的名称。

executableHelloWorldFile : hello.c
    gcc hello.c -Wall -o hello

但是,当我将'hello'更改为'executableHelloWorldFile'时,输出中没有任何变化。

我知道如何创建目标,但是在这里我想了解一下target对Makefile有什么帮助?

5 个答案:

答案 0 :(得分:4)

首先,目标被假定为文件,如果不存在或其时间戳晚于其任何依赖项,则重新生成。如果将目标名称从实际文件名更改为随机名称,则目标将始终重新制作,因为您所愚弄的任意文件不存在,并且当make运行您指定的命令时不会创建它。

编辑:你的编译器不知道make调用它,它完全执行你给它的指令(因为每个计算机程序都应该这样做)。如果你说'-o hello',它会将二进制文件写入文件'hello',而不管你想出的虚假目标名称。

答案 1 :(得分:2)

  1. 是的,在您的示例中,目标“hello”恰好导致构建.exe“hello”。

  2. 但不,您可以触发目标的任何操作(或操作组合)。

    例如,“make clean”,“make build”和“make install”以及“make all”是常用命令。它们触发makefile以1)清理已经构建的任何“垃圾”,2)重新编译项目,3)安装项目或4)做所有事情

  3. 要回答你的问题,“目标”只是告诉makefile“做某事”的一种方式。

    在您的示例中,目标将调用“gcc”。但如果 - 并且只有 - 源文件“hello.c”已过期,它将调用它。

  4. makefile通常由许多目标,规则和定义组成。

    组件通常由多个子项目组成,每个子项目都有自己的makefile。

  5. '希望有所帮助.. PSM

答案 2 :(得分:1)

您需要在规则中使用适当的变量:$@目标$^是依赖项。在你的情况下,这应该是:

executableHelloWorldFile : hello.c
    gcc $^ -Wall -o $@

或者当您只需要引用第一个依赖项时,请使用$<

executableHelloWorldFile : hello.c
    gcc $< -Wall -o $@

答案 3 :(得分:1)

make执行你给它的命令。如果该命令没有创建目标,则写入错误命令是你的错。重要的区别在于,如果正确指定了目标,则可以连续运行make两次,并且知道第二次目标是最新的并且不需要重建。当命令实际上没有创建目标时,如果你连续两次运行make,第二个将不必要地重新运行命令。

某些目标(如allclean)通常包含在Makefile中,而实际上并不是现有文件。它们代表了用户可以使用make clean等命令请求的更大操作,每次都必须运行命令。

答案 4 :(得分:1)

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

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

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

所以单词target可以是各种关键字,例如all, install, clean, etc

这是一种说出某种东西的方式。让所有意味着做一切