C 为什么';这个通用的makefile不能工作吗?

C 为什么';这个通用的makefile不能工作吗?,c,makefile,target,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=\ 梅因\ 更多的东西\ 还有更多的东西\ 全部:$(OBJS) ld$(OBJS)-o some_

我正在为我的项目编写通用的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=\
梅因\
更多的东西\
还有更多的东西\
全部:$(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\u stuff.o\
src/bar/还有更多的东西\
全部:$(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

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

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

src/bar/%.o: src/bar/%.c:
    gcc %< -o $@
OBJS=\
src/main.o\
src/foo/more\u stuff.o\
src/bar/还有更多的东西\
全部:$(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$@
这是可行的,但它又丑陋又烦人。。。如何为所有对象(在每个目录中)定义一个目标


希望这有意义

您的第二个makefile适合我(使用GNU make 3.81)。我可以运行例如
make src/main.o
,这很好。你用的是哪个版本的make?是的,第一个应该可以用。。。试试第二个……对不起,我是说第二个。它可以工作。是的,但当您运行
makeall
。。。我认为你应该(a)通过剪切/粘贴命令和错误来准确解释发生了什么:说“它不工作”对我们来说是无用的,(b)运行
make-d
,看看make试图做什么,(c)剪切并粘贴你正在测试的不工作的make文件(如果它太大,创建一个显示问题的最小版本)。我的怀疑是,你在这里发布的内容与你正在使用的内容有细微的不同,但如果不知道哪些内容实际上不起作用,就无法判断可能是什么。