制作文件警告,覆盖目标命令

2023-12-29

作为 makefile 的一部分,我想生成目标的调试或发布版本。

从功能上来说,一切正常但是,我在运行 make 时收到警告

 12 SRC := $(shell echo src/*.cpp)
 13 SRC += $(shell echo $(TEST_ROOT)/*.cpp)
 14 
 15 D_OBJECTS = $(SRC:.cpp=.o)       # same objects will need to be built differently
 16 R_OBJECTS = $(SRC:.cpp=.o)       # same objects will need to be built differently

 22 all: $(TARGET)
 23 
 25 $(TARGET): $(D_OBJECTS)
 26   $(CC) $(D_OBJECTS) -o $(TARGET)
 27 
 28 $(D_OBJECTS) : %.o: %.cpp                     # ----- run with debug flags 
 29   $(CC) $(COMMON_FLAGS) $(DEBUG_FLAGS) -c $< -o $@
 30 
 31 release: $(R_OBJECTS)
 32   $(CC) $(R_OBJECTS) -o $(TARGET)
 33 
 34 $(R_OBJECTS) : %.o: %.cpp                     # ----- run with release flags
 35   $(CC) $(COMMON_FLAGS) $(RELEASE_FLAGS) -c $< -o $@

When i make我得到调试版本,当我make release我得到发行版本。

但我也收到警告:

Makefile:35: warning: overriding commands for target `src/Timer.o'
Makefile:29: warning: ignoring old commands for target `src/Timer.o'
Makefile:35: warning: overriding commands for target `test/TimerTest.o'
Makefile:29: warning: ignoring old commands for target `test/TimerTest.o'

带着这2个问题:

  1. 有什么方法可以忽略警告
  2. 我做的事情正确吗?需要做出哪些改变?

像OP(詹姆斯·伦纳德)一样,我想抑制或避免有关覆盖的警告Makefile目标。然而,我的情况和目标不同。

I want Makefile to include base.mk, 而且我要Makefile能够覆盖目标base.mk没有任何警告消息。我正在使用 GNU Make。

GNU Make 文档描述了一种执行此操作的方法:

Create Makefile如下:

foo:
        echo 'bar' > foo

%: force
        @$(MAKE) -f base.mk $@
force: ;

来源:https://www.gnu.org/software/make/manual/html_node/Overriding-Makefiles.html https://www.gnu.org/software/make/manual/html_node/Overriding-Makefiles.html

上面的方法有一个(可能很严重的)缺点,它会调用一个单独的实例$(MAKE),这意味着(部分或全部?)变量可能(将?)不会在 make 的父级调用和子级调用之间共享。

令人高兴的是,我找到了更好的解决方案,如下所示:

Create base.mk如下:

foo-default:
        echo  'foo-default'

bar-default:
        echo  'bar-default'

%:  %-default
        @  true

Create Makefile如下:

include  base.mk

foo:
        echo  'foo  Makefile'

输出示例:

$ make foo
echo  'foo  Makefile'
foo  Makefile

$ make bar
echo  'bar-default'
bar-default

请注意,您需要能够控制中的目标名称base.mk以便你可以命名它们<target>-default。换句话说,您不能使用此方法来扩展任意基本 makefile。但是,如果你同时控制两者base.mk and Makefile,这种方法将允许您创建一个base.mk然后对其进行许多定制。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

制作文件警告,覆盖目标命令 的相关文章

随机推荐

  • 使用 php 清除 CMD-shell

    我有这个简单的 php 脚本 它每秒输出一个字符串
  • 如何删除包过滤器?

    如何禁用包过滤器 我不断收到此消息 Ignoring unknown package filter build tools 23 0 0 rc2 Warning The package filter removed all packages
  • 如何在 C# 中更改 XML 文件的属性值?

    我有一个 XML 文件 web config 我需要编辑每个标签的 value 属性 具体取决于键名称 这是 XML 文件的示例
  • 使用 xPath 循环遍历项目

    我正在尝试循环遍历 xml 文档 但我仍然在第二次迭代中获取第一个元素 不确定我缺少什么 有人可以帮忙吗 Xpath 非常新 string file HttpContext Current Server MapPath XML Locati
  • 是否需要break语句或者return语句就足够了?

    在我的 Python 3 5 脚本中 我有一个简单的for循环 看起来像这样 request simple string ignore Tuple that contains regex s to ignore for i regex in
  • 如何访问 Heroku 中的 docker 容器?

    我已按照此处构建图像的说明进行操作 https devcenter heroku com articles container registry and runtime getting started https devcenter her
  • 在 Shiny 中按日期过滤

    作为一个可怜的闪亮家伙 无法解决简单的任务 我在数据框中有一行带有日期的行 crime date lt strptime incidents REPORT DAT format Y m d 我的日期输出如下所示 1 2017 04 07 E
  • 在 Flask 中渲染 Jupyter Notebook Iframe

    我正在使用 Flask 为单个用户托管 UI 我一直在尝试做的事情是设置一种方法 让用户单击一个按钮 使用标记语言在文档中预先指定的位置插入一些文本和图像 我最初使用 Jinja2 来实现此目的 但问题是用户需要能够在插入数据后修改文档 以
  • 标签(或“标记”)接口是否已过时?

    我正在尝试帮助一位同事接受 OO 并且我发现在某些情况下 很难找到标签概念的可靠的现实示例 或marker 界面 不包含任何方法的接口 它仅用作标记或标记或标签 虽然对于我们的讨论来说这确实不重要 但我们使用 PHP 作为讨论背后的平台 因
  • ServiceStack支持二进制响应吗?

    ServiceStack服务中是否有任何机制可以返回流 大型二进制数据 WCF 的 MTOM 支持虽然笨拙 但可以有效地返回大量数据 而无需文本转换开销 我喜欢服务堆栈 这个小代码足以从内存流返回 Excel 报告 public class
  • Rails 中 Gemfile 有什么用?

    有什么用Gemfile在铁轨上 如何使用Gemfile 在 Rails 开发过程中 有时您会想要提供一些您需要的功能 但要么您不知道如何做 要么您不想自己实现它 因为有很多才华横溢的开发人员已为其开发投入了工作 您可能需要的这些开发 用户身
  • Django/Python 更新字段值(在模型保存期间)

    我试图在保存 django 模型时将它们中的许多字段大写 看着这个问题 https stackoverflow com questions 825955 changing case upper lower on adding data th
  • Gitlab 从特定源分支合并

    我在 gitlab 有一个分支叫devops我想合并我的master分支与devops分支 但是 我不希望任何其他分支发出合并请求devops分支 是否可以 基本上 对于devops作为合并时的目标分支 仅master可以是源分支 是否可以
  • 我们如何将“.db”推送到模拟器中?

    我们可以推送由某些 ide 创建的数据库吗sqlite工作室并将其推入我们的模拟器中app uses 有什么方法可以将你的 db 格式推送到android模拟器中吗 我认为您想通过在外部创建数据库来发送应用程序 这些是将数据库添加到应用程序
  • OpenShift Jenkins 设备上的 NPM 安装

    我 和其他许多人一样 正在努力让 Openshift 上的 Jenkins 墨盒与 NPM 很好地配合 按照其他人对 SO 的建议 我已成功导航需要在 Openshift 上进行的 NPM 缓存重定向 如下所述here https stac
  • 令人惊叹的 CSS 动画

    我有一个 CSS 动画 我想以 200 毫秒的间隔应用它 我已经这样设置 CSS discrete position relative opacity 1 webkit transition all 5s linear moz transi
  • 为什么允许入口点是私有的? [复制]

    这个问题在这里已经有答案了 这实际上是如何运作的 我想Main应该被 称为 但如果它被标记为私有 这怎么可能呢 public class Program private static void Main 来自 bytes com 上的 Jo
  • 如何从另一个工作流程启动一个工作流程并检索被调用工作流程的返回值

    我正在测试谷歌工作流程 并想从另一个工作流程调用工作流程 但作为一个单独的流程 不是子工作流程 我可以开始执行 但目前无法检索返回值 我收到了一个执行实例 argument null name projects xxxxxxxxxxxx l
  • 为什么 Mono 上的 NetMQ DealerSocket 在 Debian Wheezy 上不向服务器发送消息,但在 Windows 上却发送消息?

    我在 Debian Wheezy 上的 Mono 4 8 上使用 NetMQ 4 0 0 1 时遇到一些问题 经销商套接字不会发送任何消息 直到我不会停止调用它来发送新消息 当我将Thread Sleep 1000 在创建任务之间比一切都好
  • 制作文件警告,覆盖目标命令

    作为 makefile 的一部分 我想生成目标的调试或发布版本 从功能上来说 一切正常但是 我在运行 make 时收到警告 12 SRC shell echo src cpp 13 SRC shell echo TEST ROOT cpp