代码之家  ›  专栏  ›  技术社区  ›  Arkaitz Jimenez

makefile中的动态目标

  •  2
  • Arkaitz Jimenez  · 技术社区  · 16 年前

    我正在尝试创建一个Makefile,它的每个 src/ 子文件夹,以便创建静态库。

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

    但这不起作用,目标匹配起作用,但依赖项跟踪不起作用。
    如果我一个人呆着 src/%/*.cpp 这完全完成了 .cpp 但当我试图在字符串函数中使用它来转换 .cpp文件 .o 这个 %

    1 回复  |  直到 16 年前
        1
  •  2
  •   Beta    16 年前

    这很棘手,因为据我所知,您不能在必备列表中使用类似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