我有下面的makefile和目录树:
- > project / src / main.c,func.c, 生成文件
- >项目/ EXE /
- >项目/ INC /
- >项目/ 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或其他任何语法都有问题吗?
答案 0 :(得分:1)
一个明显的问题是makefile没有构建它应该构建的目标。即:
prog.exe: main.o func.o
$(cc) main.o func.o -o $(exe)/prog.exe
不构建prog.exe
,而是构建$(exe)/prog.exe
,这是一个不同的文件。修复将是:
$(exe)/prog.exe: $(obj)/main.o $(obj)/func.o
$(cc) $^ -o $@
首选使用automatic variables作为输入和输出文件的名称,以避免重复和愚蠢的拼写错误。
答案 1 :(得分:0)
你可以用make来处理缩进。它需要真正的标签。