У меня есть переменная в одном из моих make-файлов, которая содержит список архивных файлов, которые мне нужно сгенерировать в следующей форме:
/libpath/mylib1/obj/mylib1.a
/libpath/mylib2/obj/mylib2.a
/libpath/mylib3/obj/mylib3.a
и так далее.Я создал правило для создания каждого из них, в основном он сканирует родительскую папку для файлов .cpp и создает предварительные условия .o в подпапке / obj (поэтому, если / 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)))))
Это прекрасно работает, но я не могу не чувствовать, что иду по этому поводу слишком сложно.Есть ли лучший / более чистый способ делать такие вещи?