【发布时间】:2012-02-28 16:53:04
【问题描述】:
我有下面的makefile和一个目录树:
->project/src/main.c, func.c, 生成文件
->项目/exe/
->项目/公司/
->项目/obj/
cc=gcc
cflags=-c
obj=../obj
exe=../exe
inc=../inc
prog.exe: main.o func.o
$(cc) main.o func.o -o $(exe)/prog.exe
main.o: main.c $(inc)/defs.h
$(cc) $(cflags) main.c
mv main.o $(obj)/
func.o: func.c $(inc)/defs.h
$(cc) $(cflags) func.c
mv func.o $(obj)/
问题是,main.o 和 func.o(以 mv 开头)下面的第二个操作不起作用(即 main.o 没有移动到 /obj 目录)。 makefile的语法有问题吗?
【问题讨论】:
-
“不起作用”:请更准确地描述问题。没有电池的 Energizer Bunny 和 Challenger 宇宙飞船都“不起作用”,但方式截然不同。
-
使用 CC、CFLAGS 等(全部大写)是一个长期惯例。这些使用隐式规则,因此在许多情况下您甚至不需要指定规则。通过使用不同的名称来炫耀惯例是不明智的。
-
@WilliamPursell 这只是一次天真的尝试