假设我有一个如下所示的 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
目标声明为虚假目标。