假设我有一个如下所示的生成文件:
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:
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中,但它们仍然显示
一切都是最新的
该图像只是证明修改对我不起作用的证据。
makefile 永远不会被编译 - 它由
make
命令解释。当你跑或更明确地
然后默认情况下,
make
构建第一个目标-在makefile
这种情况下,这就是all
目标。要构建一个非默认目标,您需要在命令行上命名它,即或者
请注意,
clean
目标实际上并没有构建任何东西,所以不像./all
没有程序喜欢./clean
在之后运行。事实上,您可能希望将clean
目标声明为虚假目标。