Makefile中的动态目标

时间:2010-08-01 09:41:11

标签: linux makefile dependencies static-libraries

我正在尝试创建一个每个src/子文件夹都有一个目标的Makefile,以便创建一个静态库。
我目前正在尝试这个:

%.o: %.cpp
    $(CXX) $(CXXFLAGS) $(INCLUDE) -c -o $@ $<
lib%.a: $(patsubst %.cpp, %.o, $(wildcard src/%/*.cpp))
    $(AR) rcs $@ $^ 

但这不起作用,目标匹配起作用,但依赖性跟踪不起作用 如果我只是单独留下src/%/*.cpp正确完成正确目录中的.cpp文件,但是当我尝试在字符串函数中使用它来将.cpp转换为{{1}时} .o不再有用了。

1 个答案:

答案 0 :(得分:2)

这很棘手,因为据我所知你不能在先决条件列表中使用像patsubst这样的函数。有不止一种方法可以做到这一点;这可能是最不丑陋的。将路径存储在变量中,然后重新调用make,以便可以在规则之外构建先决条件列表。

ifdef OBJPATH
LIBOBJECTS := $(patsubst %.cc,%.o,$(wildcard src/$(OBJPATH)/*.cc))
lib%.a: $(LIBOBJECTS)
    $(AR) rcs $@ $^
else
lib%.a: src/%/*.cc
    @$(MAKE) -s $@ OBJPATH=$*
endif