У меня есть ситуация, когда мне нужно скомпилировать некоторые исходные файлы из библиотеки в мою собственную программу.Каталоги, в которых находятся исходные файлы, не доступны для записи.Вместо этого у меня есть локальный каталог "build", где вся работа выполнена.
Проблема с переводом путей.Исходные файлы называются, скажем, xxxx.cpp
и yyyy.cpp
, и они находятся в /path/to/source/xxxx/xxxx.cpp
и /path/to/source/yyyy/yyyy.cpp
.
Используя $ (patsubst ...), я могу с радостью преобразовать эти пути в build/xxxx/xxxx.cpp
и т. д., но я не могу заставить его убрать первую xxxx
.
Я мог бы сделать с созданием цели, которая будет соответствовать чему-то вроде этого:
build/%.o: /path/to/source/%/%.cpp
$(CXX) ...
...но я не могу заставить это работать вообще.Я думаю, что ему не нравится двойной подстановочный знак в последней части цели.
«Источник» для имен - это единственная переменная, содержащая только «xxxx» и «yyyy» в:
SYS_LIBS = xxxx yyyy
Есть какие-нибудь предложения о том, как заставить что-то подобное работать?
О, мне нужно, чтобы это было "универсальное" решение - это будет включенный make-файл во многих проектах, использующих эту библиотеку.файлов, поэтому создание цели вручную для каждого файла не вариант.Я не могу предсказать, какие файлы будут в библиотеке.