Обязательное правило предварительной сборки в универсальном Makefile

Я компилирую код C ++ для Webots (симулятор робота) с помощью make-файлов, и я использую универсальный make-файл Makefile.include Webots поставляет для облегчения процесса.

Я создаю собственный make-файл, устанавливаю кучу необходимых переменных, а затем вызываю этот make-файл, который устанавливает все необходимые правила для компиляции. Вот так все и должно было работать.

Я получаю следующую ошибку:

make[1]: *** No rule to make target 'USER_PREBUILD'.  Stop.
/usr/share/webots/resources/Makefile.include:503: recipe for target 'pre-build' failed
make: *** [pre-build] Error 2

И глядя на соответствующую строку (от Makefile.include):

$(SUPPORTED_TARGETS): post-build

USER_PREBUILD:

USER_POSTBUILD:

pre-build:
@$(MAKE) --silent USER_PREBUILD

post-build: main-build
@$(MAKE) --silent USER_POSTBUILD

$(TARGETS): pre-build

main-build: $(TARGETS)

Я не уверен, что нет синтаксической ошибки при вызове make в pre-build а также post-build, или если USER_PREBUILD а также USER_POSTBUILD должны быть конкретными файлами, но даже если заменить их на $(USER_PREBUILD) я получил *** No targets specified and no makefile found,
Поэтому я предполагаю, что мне нужно было бы установить эти переменные перед вызовом внешнего make-файла, но каков именно синтаксис, если мне не нужно ничего делать перед сборкой?

Странно, даже несмотря на эти ошибки, программа компилируется (я получаю * .o, * .d и двоичный файл на build папку), но он никогда не копирует двоичный файл в папку назначения.

0

Решение

Это немного странный способ настроить вещи в этом файле.

USER_PREBUILD: а также USER_POSTBUILD: линии не имеют никакого эффекта и ничего не делают для кого-либо (по крайней мере, я знаю).

У вас есть два варианта решения этой проблемы.

Вы можете предоставить пустые правила для USER_PREBUILD а также USER_POSTBUILD цели в вашем make-файле:

USER_PREBUILD USER_POSTBUILD: ;

или вы можете избежать даже попытки запуска этих целей (за счет предупреждения о перегрузке от make), используя эти строки:

pre-build: ;
post-build: main-build ;

в вашем make-файле после включение Makefile.include,

1

Другие решения


По вопросам рекламы [email protected]