makefile - 干净的目标

时间:2011-06-23 04:55:22

标签: gcc makefile cygwin gnu-make

任何人都可以告诉我如何执行makefile中编写的clean目标。 这是我的代码

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

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

clean :  
    rm *.c

我有一些问题。如何使用clean as target清理所有这些c文件。我们给命令make -f file1(比如文件名是file1),它看到目标为jamm并执行但它不会执行干净的target.If在命令行中我说make clean它说没有这样的文件或目录我是无法得到这个概念任何人都可以告诉我如何在我的make文件中写下这些干净。请给我一个

2 个答案:

答案 0 :(得分:3)

如果您有一个名为“ 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 ????

答案 1 :(得分: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