为什么这个通用的makefile不起作用?

时间:2016-11-25 23:06:36

标签: c makefile target

我正在为我的项目编写通用makefile。我想要做的是提供一个对象列表,并自动编译它们。这是一个简单的makefile:

OBJS=\
main.o \
more_stuff.o \
and_even_more_stuff.o \

all: $(OBJS)
   ld $(OBJS) -o some_library.so

%.o: %.c
    gcc $< -o $@

正如您所看到的,它所做的就是遍历所有对象,检查相关源文件是否存在,然后编译它。

这很有效,但是一旦我尝试将东西放入子目录中,它就不再起作用了:

OBJS=\
src/main.o \
src/foo/more_stuff.o \
src/bar/and_even_more_stuff.o \

all: $(OBJS)
   ld $(OBJS) -o some_library.so

# These targets no longer exist?
%.o: %.c
    gcc $< -o $@

为了使其工作,我必须为每个目录创建一个新目标...

OBJS=\
src/main.o \
src/foo/more_stuff.o \
src/bar/and_even_more_stuff.o \

all: $(OBJS)
   ld $(OBJS) -o some_library.so

src/%.o: src/%.c
    gcc $< -o $@

src/foo/%.o: src/foo/%.c
    gcc $< -o $@

src/bar/%.o: src/bar/%.c:
    gcc %< -o $@

这很有效,但它丑陋而烦人......我怎样才能为所有对象(在每个目录中)定义一个目标?

希望这是有道理的!

0 个答案:

没有答案