Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix Clean指令在makefile中不起作用_Unix_Makefile - Fatal编程技术网

Unix Clean指令在makefile中不起作用

Unix Clean指令在makefile中不起作用,unix,makefile,Unix,Makefile,我正在为我的程序“p1”编写一个makefile,但我无法让我的“clean”工作 以下是之前/之后的内容: 不管出于什么原因,“干净”永远不会执行。有人能告诉我为什么吗?我是makefiles新手,所以我可能犯了一个我不知道的非常明显的错误。您应该手动运行它:使p1干净 此外,你的Make文件可能要短得多 p1: bst_info.o bst_insert.o bst_struct_def.o gcc $^ -o $@ clean: rm -f *.o 您

我正在为我的程序“p1”编写一个makefile,但我无法让我的“clean”工作

以下是之前/之后的内容:


不管出于什么原因,“干净”永远不会执行。有人能告诉我为什么吗?我是makefiles新手,所以我可能犯了一个我不知道的非常明显的错误。

您应该手动运行它:
使p1干净

此外,你的Make文件可能要短得多

p1: bst_info.o bst_insert.o bst_struct_def.o
        gcc $^ -o $@

clean:
        rm -f *.o

您应该手动运行它:
makep1clean

此外,你的Make文件可能要短得多

p1: bst_info.o bst_insert.o bst_struct_def.o
        gcc $^ -o $@

clean:
        rm -f *.o

如果没有在命令行上为其指定要构建的特定目标,那么make将始终在makefile中构建第一个目标。它将通过检查目标的所有先决条件及其先决条件等确保目标是最新的,然后构建目标(如果需要)

除非您特别请求,否则不会构建不属于该树的任何目标。因此,在本例中,
clean
不是第一个目标,也不是第一个目标的先决条件,等等。因此它不是构建的。如果您想要构建它,您应该运行
makeclean
请求构建它,或者您需要将其添加到先决条件列表中。但是,这样做很棘手,因为您希望它最后运行。所以你需要做如下的事情:

clean: p1
        rm -f *.o
作为第一个目标。现在将运行
clean
,但在此之前将构建
p1
,等等

然而,这是非常不寻常的,不太可能是你想要的。拥有makefile的全部意义在于,您只需重新编译已更改的文件,而不必重新编译未更改的文件。如果每次都删除所有对象文件,则每次运行make时都必须重新编译所有内容


如果您总是希望每次都重新编译所有内容,那么
make
是无用的。您也可以编写一个shell脚本来编译代码,然后删除所有对象。

如果您没有在命令行上为其指定要构建的特定目标,那么make将始终在makefile中构建第一个目标。它将通过检查目标的所有先决条件及其先决条件等确保目标是最新的,然后构建目标(如果需要)

除非您特别请求,否则不会构建不属于该树的任何目标。因此,在本例中,
clean
不是第一个目标,也不是第一个目标的先决条件,等等。因此它不是构建的。如果您想要构建它,您应该运行
makeclean
请求构建它,或者您需要将其添加到先决条件列表中。但是,这样做很棘手,因为您希望它最后运行。所以你需要做如下的事情:

clean: p1
        rm -f *.o
作为第一个目标。现在将运行
clean
,但在此之前将构建
p1
,等等

然而,这是非常不寻常的,不太可能是你想要的。拥有makefile的全部意义在于,您只需重新编译已更改的文件,而不必重新编译未更改的文件。如果每次都删除所有对象文件,则每次运行make时都必须重新编译所有内容


如果您总是希望每次都重新编译所有内容,那么
make
是无用的。您不妨编写一个shell脚本来编译您的代码,然后删除所有对象。

好的,所以它永远不应该单独运行-必须显式调用它?我以前在项目自述中没有看到过这一点:
当我们以clean为目标运行make时,它应该删除所有的“.o”文件和名为core的文件(如果有的话).
。我认为clean目标必须在p1创建后自动运行。好吧,所以它不应该单独运行-必须显式调用它?我以前在项目自述中没有看到过这一点:
当我们以clean作为目标运行make时,它应该删除所有的“.o”文件和名为core的文件(如果有)。
。我认为清洁目标必须在p1创建后自动运行。