Я компилирую код 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
папку), но он никогда не копирует двоичный файл в папку назначения.
Это немного странный способ настроить вещи в этом файле.
USER_PREBUILD:
а также USER_POSTBUILD:
линии не имеют никакого эффекта и ничего не делают для кого-либо (по крайней мере, я знаю).
У вас есть два варианта решения этой проблемы.
Вы можете предоставить пустые правила для USER_PREBUILD
а также USER_POSTBUILD
цели в вашем make-файле:
USER_PREBUILD USER_POSTBUILD: ;
или вы можете избежать даже попытки запуска этих целей (за счет предупреждения о перегрузке от make), используя эти строки:
pre-build: ;
post-build: main-build ;
в вашем make-файле после включение Makefile.include
,