gpt4 book ai didi

c++ - 通用 Makefile 中所需的预构建规则

转载 作者:行者123 更新时间:2023-11-28 06:16:14 25 4
gpt4 key购买 nike

我正在通过 makefile 为 Webots(一种机器人模拟器)编译 C++ 代码,并且我正在使用 Webots 提供的通用 makefile Makefile.include 来简化该过程。

我通过自己的 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-buildpost-build中调用make时是否没有语法错误,或者如果 USER_PREBUILDUSER_POSTBUILD 应该是具体文件,但即使将它们替换为 $(USER_PREBUILD) 我也会得到 ***未指定目标且未找到生成文件。所以我假设我需要在调用外部 makefile 之前设置这些变量,但是如果我在构建之前没有任何事情要做的话,语法到底是什么?

奇怪的是,尽管有这些错误,程序仍然可以编译(我在 build 文件夹中得到了 *.o、*.d 和二进制文件),但它从未将二进制文件复制到目标文件夹.

最佳答案

在该文件中进行设置有点奇怪。

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

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

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

USER_PREBUILD USER_POSTBUILD: ;

或者您甚至可以通过使用以下行来避免尝试运行这些目标(以来自 make 的压倒一切的警告消息为代价):

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

在您的 makefile 之后包含 Makefile.include

关于c++ - 通用 Makefile 中所需的预构建规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30240273/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com