Makefile 在make中将.cpp文件转换为.o文件的多组规则

Makefile 在make中将.cpp文件转换为.o文件的多组规则,makefile,Makefile,假设我有以下生成文件: SRC = trav.cpp LSRC = node.cpp tree.cpp LIB = lib/libvtree.so OBJS = $(patsubst %.cpp,obj/%.o,$(SRC)) LOBJS = $(patsubst %.cpp,obj/%.o,$(LSRC)) $(LOBJS) : $(LSRC) $(CC) -fPIC -o $@ -c $< $(OBJS) : $(SRC) $(CC) -o $@ -c

假设我有以下生成文件:

SRC = trav.cpp
LSRC = node.cpp tree.cpp
LIB = lib/libvtree.so

OBJS = $(patsubst %.cpp,obj/%.o,$(SRC))
LOBJS = $(patsubst %.cpp,obj/%.o,$(LSRC))


$(LOBJS) : $(LSRC)
      $(CC) -fPIC -o $@ -c $<

$(OBJS) : $(SRC)
      $(CC) -o $@ -c $<

$(LIB) : $(LOBJS)
      $(CC) -shared -o $@ $(LOBJS) $^

trav.exe: $(LOBJS) $(OBJS) $(LIB)
      $(CC) -o $@ $(LFLAGS) $(OBJS) -Llib libvtree -lstdc++
它一直试图将node.cpp编译到这两个.o文件中

make中是否有一种方法可以为单独的文件集指定单独的规则,而不必拆分 目录树,并使用递归make


谢谢。

这些规则可能没有达到你想象的效果:

$(LOBJS) : $(LSRC)
      $(CC) -fPIC -o $@ -c $<

$(OBJS) : $(SRC)
      $(CC) -o $@ -c $<
您可能也需要一个
src/
,但我看不出它在原始文件中的来源。因此,
-g-DMEMPOOL
也是如此

编辑注释:使用<代码> CXX/COD>而不是<代码> cc>代码>是习惯用法,因为您有C++程序。< /P>查看模式规则。
$(LOBJS) : $(LSRC)
      $(CC) -fPIC -o $@ -c $<

$(OBJS) : $(SRC)
      $(CC) -o $@ -c $<
$(LOBJS) : obj/%.o : %.cpp
      $(CC) -fPIC -o $@ -c $<

$(OBJS) : obj/%.o : %.cpp
      $(CC) -o $@ -c $<