我有一个看起来像这样的makefile
all: all_functions
all_functions: a_functions.o b_functions.o c_functions.o d_functions.o main.o a.h b.h c.h d.h main.h
gcc -o program1 a_functions.o b_functions.o c_functions.o d_functions.o main.o
a_functions.o: a_functions.c a.h
gcc -c -o a_functions.o a_functions.c
b_functions.o: b_functions.c b.h
gcc -c -o b_functions.o b_functions.c
c_functions.o: c_functions.c c.h
gcc -c -o c_functions.o c_functions.c
d_functions.o: d_functions.c d.h
gcc -c -o d_functions.o d_functions.c
main.o: main.c main.h
gcc -c -o main.o main.c
clean:
rm *.o program1
install:
cp ./program1 "/usr/local/program1"
uninstall:
rm "/usr/local/program1"
我在 makefile 中使用了制表符而不是空格。当我这样做时make -f Makefile
,makefile 每次都会编译并创建 program1,即使文件存在并且没有进行任何更改。我的makefile有什么问题?我希望看到一条错误消息“make:Nothing to be done for..”
您正在使用假目标,即具有有用名称但其配方不产生目标的目标。也就是说,make
最终尝试构建all_functions
目标,但关联的配方不会构建任何名为all_functions
.
如果将前两行替换为
all: program1
program1: a_functions.o b_functions.o c_functions.o d_functions.o main.o a.h b.h c.h d.h main.h
您应该会发现它的make
行为与您期望的一样。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句