【问题标题】:makefiles - the clean as targetmakefiles - 干净的目标
【发布时间】:2011-09-20 22:13:17
【问题描述】:

谁能告诉我如何执行编写在makefile 中的clean 目标。 这是我的代码

jamm : hello.o ghola.o
    gcc $^ -o $@

%.o : %.c
    gcc -c S<

clean :  
    rm *.c

我有一些问题。如何使用 clean 作为目标来清理所有这些 c 文件。我们给出命令 make -f file1(说文件名是 file1),它把目标视为 jamm 并执行,但它不会执行干净的目标。如果在命令行中我说 make clean 它说我没有这样的文件或目录无法理解这个概念,任何人都可以告诉我当我写在我的 make 文件中时如何执行这些干净的操作。请大家

【问题讨论】:

  • 请至少格式化您的示例制作文件。
  • 看起来你在那个 make 文件中没有一个干净的目标
  • 好吧,我这样做了,但无论我如何尝试,我都不知道如何将其设置为格式
  • 你试过“make -f file1 clean”吗?
  • 不是这样,这就是清洁的方法吗?

标签: gcc makefile cygwin gnu-make


【解决方案1】:

在我的一个 makefile 中,clean 目标如下所示:

.PHONY: depend clean all new

clean:
    rm *.o *~ $(PROGS) ~/include/*.gch

请注意,可执行语句的行以制表符开头。

其他一些事情:

  1. 您可能不想rm 您的.c 文件。这些是您的源文件,您可能会丢失所有编码它们的工作。
  2. 您想要删除的是您的对象(在我的示例中为.o)和可执行文件(在我的示例中为$(PROGS),实际上是任何包含可执行文件名称的变量)文件,以及预编译的头文件(.gch ),因此您可以从头再来。
  3. 实际上不生成该名称文件的目标,如clean,应列为.PHONY 的先决条件。这让我们知道,即使有一个名为 clean 的文件,它也应该运行该命令。
  4. 要执行特定目标(例如clean),只需输入

    make clean
    

    但请确保:

    • 您与您的 makefile 位于同一目录中
    • 您的 makefile 需要命名为 Makefilemakefile。如果你使用的是 GNU make,你也可以调用它GNUmakefile

【讨论】:

    【解决方案2】:

    如果您有一个名为“clean”的文件,请检查您的目录。 可能是您的make 调用认为它必须以某种方式生成“干净”文件。

    要解决此问题,请尝试在您的干净目标之前添加.PHONY indicator

    jamm : hello.o ghola.o
        gcc $^ -o $@
    
    %.o : %.c
        gcc -c S<
    
    # add this:
    .PHONY: clean
    
    clean :  
        rm *.c
    

    顺便说一句:您的清洁目标看起来很糟糕:您不应该删除 .o 文件而不是 .c 吗????

    【讨论】:

      猜你喜欢
      • 2015-02-13
      • 1970-01-01
      • 1970-01-01
      • 2012-04-09
      • 1970-01-01
      • 2011-02-07
      • 2012-10-03
      • 1970-01-01
      • 2012-10-26
      相关资源
      最近更新 更多