带有目录文件的目录的简单makefile。

时间:2015-03-04 13:59:45

标签: makefile

我编写了非常简单的makefile,我无法弄清楚它为什么工作不正确。我想把.o文件放在不同的目录中。 不幸的是我的.o文件不是在./obj/Debug中创建的,但它们在当前工作目录中与makefile所在的目录相同。是否应该在调用 make 之前创建这些目录?我无法找到我的错误。

SHELL = /bin/sh 

.SUFFIXES:
.SUFFIXES: .c .o

CC := gcc       # compiler type 

CFLAGS = -Wall
Version := Debug
oPath = obj/$(Version)

app: header1.o main.o
    $(CC) -Wall -o -v app $(oPath)/main.o $(oPath)/header1.o

$(oPath)/%.o: %.c header1.h
    $(CC) $(CFLAGS) -c $< -o $@

我也尝试过:

$(oPath)/%.o: %.c header1.h
    $(CC) $(CFLAGS) -c $< -o $(oPath)/$@

但没有成功。

1 个答案:

答案 0 :(得分:2)

该行

app: header1.o main.o

告诉make app依赖于当前工作目录中的header1.omain.o,因此它使用隐式规则来构建它们,然后它们出现在该目录中。要解决此问题,请使用

app: $(oPath)/header1.o $(oPath)/main.o
然后

make将使用您的模式规则构建$(oPath)/header1.o$(oPath)/main.o,然后再为app运行收件人。