我试图制作一个简单的makefile,它将构建以src目录的子目录命名的多个工件。这是我的目录结构:
>find .
.
./makefile
./src
./src/binA
./src/binA/main.java
./src/binB
./src/binB/main.cpp
./src/binC
./src/binC/main.scala
这是我正在尝试使用的makefile。由于某种原因,当我在同一规则中同时使用模式和通配符时,二进制目标拒绝扩展其依赖性
>cat makefile
dirs := $(shell find src -mindepth 1 -type d)
all: $(dirs:src/%=bin/%.exe)
@echo $(dirs)
bin/%.exe: src/%/*
@echo "$@ <-- $^"
我知道dirs正确设置
src/binA src/binB src/binC
这是我得到的错误
>make
make: *** No rule to make target `bin/binA.exe', needed by `all'. Stop.
如何制作一个通用规则,将其依赖关系正确扩展为基于其名称的子目录的内容
答案 0 :(得分:0)
我可以通过将规则匹配器更改为bin/%.exe: $(wildcard src/%/*)
并在此之前添加.SECONDARYEXPANSION:
来实现此功能。