【发布时间】:2012-02-21 22:12:35
【问题描述】:
我的一个 makefile 中有一个变量,其中包含我需要生成的归档文件列表,格式如下:
/libpath/mylib1/obj/mylib1.a
/libpath/mylib2/obj/mylib2.a
/libpath/mylib3/obj/mylib3.a
等等。我已经设置了一个规则来创建每一个,基本上它会扫描父文件夹中的 .cpp 文件并在 /obj 子文件夹中创建 .o 先决条件(因此,如果 /libpath/mylib1 包含 foo.cpp 和 bar.cpp 那么先决条件是 /libpath/mylib1/obj/foo.o 和 /libpath/mylib1/obj/bar.o 等)。我可以让它工作的唯一方法是使用 .SECONDEXPANSION:我创建一个 .cpp 文件列表,剥离文件夹和扩展名,使用 .o 扩展名作为后缀,然后使用目标文件夹作为前缀:
%.a: $$(addprefix $$(dir $$@),$$(addsuffix .o,$$(basename $$(notdir $$(wildcard $$(dir $$@)../*.cpp)))))
这很好用,但我不禁觉得我正在以一种过于复杂的方式来解决这个问题。有没有更好/更清洁的方法来做这样的事情?
【问题讨论】: