У меня есть проект, в который я добавляю поддержку gettext. К сожалению, из-за структуры и ограничений проекта я не могу пройти рекомендованный путь изменения проекта до автоматизированного. К сожалению, мой make-fu довольно слабый, и у меня возникают проблемы с реализацией правил для создания выходного архива:
- Возьмите все .po файлы в подкаталоге msg и запустите на них msgfmt, чтобы получить .mo файлы (в моем целевом каталоге)
- Поместите файлы .po в структуру каталогов, ожидаемую gettext: (dir) / (locale) / LC_MESSAGES / (domainname) .mo
Вот что у меня есть
MSGSRC=msg/*.po
MSGOBJ=$(addprefix $(TARGET_BUILD_PATH)/$(target)/,$(MSG_SRC:.po=.mo))
$(TARGET_BUILD_PATH)/$(target)/msg/%.mo: msg/%.po
msgfmt -c $< -o $@
# Put in correct place
mkdir -p $(TARGET_BUILD_PATH)/$(target)/msg/$(*F)/LC_MESSAGES
cp $@ $(TARGET_BUILD_PATH)/$(target)/msg/$(*F)/LC_MESSAGES/myapp.mo
archive: $(MSGOBJ) (other objs....)
(make the archive tarball...)
Проблема с существующим кодом заключается в том, что по какой-то причине $ (* F) выходит просто * вместо имени локали (файлы .po называются en_US.po и т. Д.). Это также кажется неправильным, потому что цель должна быть реальной целью, а не хакерским msgfmt и копией, которые у меня есть. Структура каталогов важна, поскольку make-файл запускается несколько раз для разных кросс-компиляций ($ (target)), а выходные данные архивируются в tar-архив для установки на устройства.