首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >泛型Makefile中所需的预构建规则

泛型Makefile中所需的预构建规则
EN

Stack Overflow用户
提问于 2015-05-14 14:44:11
回答 1查看 934关注 0票数 0

我正在通过makefile编译Webots (一个机器人模拟器)的C++代码,我还使用了通用的makefile Makefile.include Webots工具来简化这个过程。

我通过自己的makefile构建,设置了一组必需的变量,然后调用makefile来设置编译所需的所有规则。反正本来应该是这样的。

我得到了以下错误:

代码语言:javascript
复制
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):

代码语言:javascript
复制
$(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-buildpost-build中调用USER_PREBUILDUSER_POSTBUILD时是否存在语法错误,或者USER_PREBUILDUSER_POSTBUILD是否应该是具体的文件,但是即使用$(USER_PREBUILD)替换它们,也会得到*** No targets specified and no makefile found。因此,我假设在调用外部makefile之前需要设置这些变量,但是如果在构建之前没有什么可做的,那么语法到底是什么呢?

奇怪的是,即使存在这些错误,程序也会编译(我在build文件夹上得到*.o、*.d和二进制文件),但它从不将二进制文件复制到目标文件夹。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-14 15:05:57

在那个文件中设置东西的方式有点奇怪。

USER_PREBUILD:USER_POSTBUILD:行没有任何效果,也没有为任何人做任何事情(至少据我所知)。

对于如何解决这个问题,您有两个选择。

您可以在makefile中为USER_PREBUILDUSER_POSTBUILD目标提供空规则:

代码语言:javascript
复制
USER_PREBUILD USER_POSTBUILD: ;

或者,您甚至可以通过使用以下行来避免运行这些目标的尝试(代价是来自make的超凡警告消息):

代码语言:javascript
复制
pre-build: ;
post-build: main-build ;

在makefile 中,在之后包含Makefile.include

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30240273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档