如何修改已经编译好的 makefile?

如何修改已经编译好的 makefile?

假设我有一个如下所示的 makefile:

all: a_functions.o b_functions.o c_functions.o d_functions.o main.o
     gcc -o all a_functions.o b_functions.o c_functions.o d_functions.o main.o
a_functions.o: a_functions.c
     gcc -c -o a_functions.o a_functions.c
b_functions.o: b_functions.c
     gcc -c -o b_functions.o b_functions.c
c_functions.o: c_functions.c
     gcc -c -o c_functions.o c_functions.c
main.o: main.c
     gcc -c -o main.o main.c

我可以使用命令来编译它

sudo make -f makefile

如果我运行,程序就会运行良好

./all

但是如果我想在 makefile 中添加一条 clean 命令,该怎么办?我添加了

clean:
     rm *.o all

在 makefile 的末尾,但我的终端显示

-bash: ./clean: No such file or directory

当我做 ./clean

当然,重新编译 makefile 也不起作用。它显示

make: 'all' is up to date.

当我做sudo make -f makefile

我在这里找到如何编辑 makefile?你可以使用

$ CFLAGS="-std=c99" make

在终端中执行此命令或者我可以添加

CFLAGS=-std=c99

在我的 makefile 中,但它们仍然显示

一切都是最新的

该图像仅证明修改对我来说不起作用。

在此处输入图片描述

答案1

makefile 永远不会被编译 - 它由make命令解释。当你运行

make

或者更明确地

make -f makefile

然后默认make构建第一个目标makefile- 在本例中,这就是all目标。要构建非默认目标,您需要在命令行上命名它,即

make clean

或者

make -f makefile clean

请注意,clean目标实际上不会构建任何东西,因此与./all没有程序可./clean运行不同。事实上,您可能希望将clean目标声明为虚假目标

相关内容