Как заставить GNU MAKE обрабатывать файлы .po как файлы .h? - PullRequest
0 голосов
/ 24 апреля 2019

У меня есть файл .c, который зависит от сгенерированного включаемого файла с именем control.po, но когда он включен в зависимости, make считает, что ему нужно его построить.

make[1]: *** No rule to make target `control.po', needed by `proccmd.o'. Stop.

proccmd.o:  ddemsgid.do ddelen.do control.po tprecs.ro tlktp.h comtrac.h basmsg.fo \
        tiop.h

Если я копирую control.po в control.fo и изменяю зависимость control.po, он компилируется.

Я попытался изменить .SUFFIXES таким образом

.SUFFIXES:
.SUFFIXES: .c .o .h .po

и это

.SUFFIXES:
.SUFFIXES: .c .o .h

с тем же результатом.

Я предполагаю, что существует некое подразумеваемое правило для файлов .po.

Я конвертирую большой проект из проприетарногоbuild to gnu make, поэтому я не могу легко изменить расширения сгенерированных файлов.

Ответы [ 2 ]

0 голосов
/ 24 апреля 2019

сгенерированные файлы включения находятся в другом каталоге, и мне не удалось добавить запись vpath для файлов .po ..

VPATH_INCLUDE_LIST = ../include:../../include:../../../include:../../../../include

vpath% h $ (VPATH_INCLUDE_LIST) vpath% .do $ (VPATH_INCLUDE_LIST) vpath% .fo $ (VPATH_INCLUDE_LIST)vpath% .to $ (VPATH_INCLUDE_LIST) vpath% .ro $ (VPATH_INCLUDE_LIST) vpath% .go $ (VPATH_INCLUDE_LIST) vpath% .po $ (VPATH_INCLUDE_LIST)

0 голосов
/ 24 апреля 2019

Я предполагаю, что существует некое подразумеваемое правило для файлов .po.

Неправильное предположение. Встроенные правила получены с make -p, и они не упоминают .po


Как я сказал в комментариях:

  • при создании большого проекта, ninja более подходит (он работает по умолчанию параллельно, как make -j, и работает быстрее). Если вы переходите с проприетарной системы сборки, вероятно, будет лучше. Вам нужно будет написать или найти генератор build.ninja (например, с помощью генерирующего его скрипта Python, с мезон и т. Д.).

  • Если вы остаетесь с GNU make, вы должны добавить свои собственные рецепты и правила для суффикса .po (при условии, что ваш foo.po сгенерирован из некоторого foo.src). Прочтите документацию GNU make, и вам может понадобиться rule вроде

    %.po: %.src
       # how to build a .po from some .src fle
    
  • Вы можете найти полезным римейк с -x для отладки Makefile

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...