makefile - 具有多个目标的 Makefile 规则,用于单次调用
问题描述
根据gnu make 文档,如果规则通过一次调用生成多个目标(例如,使用配方执行具有多个输出文件的工具),您可以使用 '&:' 规则语法来告诉 make。我在使用此语法时收到关于目标“&”的警告,但是,当在多个规则中有多个(但唯一)目标时。好像将 & 符号弄错了目标名称,而不是作为目标先决条件分隔符的一部分。
在我的原始项目中,我有两个具有多个目标的规则和一个从单个语句/工具生成这些目标的配方。两个规则中的每一个的目标都是唯一的。我创建了以下简单示例来演示 make 生成的警告:
all: file_abbc
.PHONY: all clean
clean:
del /Q file_*
file_abbc: file_ab file_bc
copy file_ab+file_bc file_abbc
file_ab file_bc &: file_a file_b file_c
copy file_a+file_b file_ab
copy file_b+file_c file_bc
file_a file_b file_c &: content
copy content file_a
copy content file_b
copy content file_c
在上面的 Windows 上运行 make 的警告:
Makefile:17:警告:覆盖目标“&”的配方
Makefile:13:警告:忽略目标“&”的旧配方
为什么抱怨目标'&'?
解决方案
您使用的是不理解&:
规则的旧版本 GNU make,因此仅将&
其视为文件名。用于make --version
查看您正在运行的版本,如果它比 4.3 旧,则升级
推荐阅读
- c# - 如何将对象序列化为 JSON 并将其异步写入 .Net Core 3.1 中的管道?
- azure-devops - ADO 管道变量使用已安装的 nuget 版本作为变量
- java - Java Selenium 3.14 和 Edge Chromium - 如何开始工作?
- html - 一个问题和
- python - 使用flask-restplus在flask-SQLAlchemy中创建多对多关联表时出错
- python - Selenium 找不到类
- javascript - 为什么这个正则表达式会拆分第二个双引号而不是第一个双引号?
- flutter - CheckBox 值,我想添加,如果用户选中复选框,那么它应该添加 amount=amount + 18% ,如果不是那么只计算我的代码
- vuejs2 - 如何在golang中使用echo接收json数组
- snakemake - Snakemake:将命令行参数传递给脚本