通用 Makefile 中所需的预构建规则
Required prebuild rule in generic Makefile
我正在通过 makefile 为 Webots(机器人模拟器)编译 C++ 代码,并且我正在使用通用的 makefile Makefile.include
Webots 供应来简化这个过程。
我通过自己的 makefile 构建,设置一堆必需的变量,然后调用那个设置所有必要的编译规则的 makefile。无论如何,这就是它应该工作的方式。
我收到以下错误:
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)
我不确定在pre-build
和post-build
中调用make
时是否没有语法错误,或者USER_PREBUILD
和USER_POSTBUILD
应该是具体文件,但即使用 $(USER_PREBUILD)
替换它们,我也会得到 *** No targets specified and no makefile found
。
所以我假设我需要在调用外部 makefile 之前设置这些变量,但是如果我在构建之前没有任何事情要做的话,语法到底是什么?
奇怪的是,尽管存在这些错误,程序仍然可以编译(我在 build
文件夹中获得了 *.o、*.d 和二进制文件),但它从未将二进制文件复制到目标文件夹。
在该文件中进行设置有点奇怪。
USER_PREBUILD:
和 USER_POSTBUILD:
行没有任何作用,也没有为任何人做任何事情(至少我知道)。
对于如何解决这个问题,您有两种选择。
您可以在 makefile 中为 USER_PREBUILD
和 USER_POSTBUILD
目标提供空规则:
USER_PREBUILD USER_POSTBUILD: ;
或者您甚至可以通过使用以下行来避免尝试 运行 这些目标(以来自 make 的压倒一切的警告消息为代价):
pre-build: ;
post-build: main-build ;
在您的 makefile 包含 Makefile.include
.
之后
我正在通过 makefile 为 Webots(机器人模拟器)编译 C++ 代码,并且我正在使用通用的 makefile Makefile.include
Webots 供应来简化这个过程。
我通过自己的 makefile 构建,设置一堆必需的变量,然后调用那个设置所有必要的编译规则的 makefile。无论如何,这就是它应该工作的方式。
我收到以下错误:
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)
我不确定在pre-build
和post-build
中调用make
时是否没有语法错误,或者USER_PREBUILD
和USER_POSTBUILD
应该是具体文件,但即使用 $(USER_PREBUILD)
替换它们,我也会得到 *** No targets specified and no makefile found
。
所以我假设我需要在调用外部 makefile 之前设置这些变量,但是如果我在构建之前没有任何事情要做的话,语法到底是什么?
奇怪的是,尽管存在这些错误,程序仍然可以编译(我在 build
文件夹中获得了 *.o、*.d 和二进制文件),但它从未将二进制文件复制到目标文件夹。
在该文件中进行设置有点奇怪。
USER_PREBUILD:
和 USER_POSTBUILD:
行没有任何作用,也没有为任何人做任何事情(至少我知道)。
对于如何解决这个问题,您有两种选择。
您可以在 makefile 中为 USER_PREBUILD
和 USER_POSTBUILD
目标提供空规则:
USER_PREBUILD USER_POSTBUILD: ;
或者您甚至可以通过使用以下行来避免尝试 运行 这些目标(以来自 make 的压倒一切的警告消息为代价):
pre-build: ;
post-build: main-build ;
在您的 makefile 包含 Makefile.include
.