我正在通过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中调用USER_PREBUILD和USER_POSTBUILD时是否存在语法错误,或者USER_PREBUILD和USER_POSTBUILD是否应该是具体的文件,但是即使用$(USER_PREBUILD)替换它们,也会得到*** No targets specified and no makefile found。因此,我假设在调用外部makefile之前需要设置这些变量,但是如果在构建之前没有什么可做的,那么语法到底是什么呢?
奇怪的是,即使存在这些错误,程序也会编译(我在build文件夹上得到*.o、*.d和二进制文件),但它从不将二进制文件复制到目标文件夹。
发布于 2015-05-14 15:05:57
在那个文件中设置东西的方式有点奇怪。
USER_PREBUILD:和USER_POSTBUILD:行没有任何效果,也没有为任何人做任何事情(至少据我所知)。
对于如何解决这个问题,您有两个选择。
您可以在makefile中为USER_PREBUILD和USER_POSTBUILD目标提供空规则:
USER_PREBUILD USER_POSTBUILD: ;或者,您甚至可以通过使用以下行来避免运行这些目标的尝试(代价是来自make的超凡警告消息):
pre-build: ;
post-build: main-build ;在makefile 中,在之后包含Makefile.include。
https://stackoverflow.com/questions/30240273
复制相似问题