在 Makefile 中转义文件名中的冒号

2024-01-04

有没有办法让 GNU make 正确处理包含冒号的文件名?

我遇到的具体问题恰好涉及模式规则。这是一个不依赖于剪切和粘贴制表符的简化版本:

% make --version
GNU Make 3.81
Copyright (C) 2006  Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.

This program built for x86_64-redhat-linux-gnu
% cat Makefile
COLON := \:
all: ; true
%.bar: ; cp $< $@
x.bar: x.foo
%.foo: ; touch $@
a$(COLON)b.bar: a$(COLON)b.foo
all: x.bar a$(COLON)b.bar
clean: ; rm -f *.foo *.bar
% make clean
rm -f *.foo *.bar
% make
touch x.foo
cp x.foo x.bar
cp  a\:b.bar
cp: missing destination file operand after `a:b.bar'
Try `cp --help' for more information.
make: *** [a\:b.bar] Error 1

将 $(COLON) 替换为文字 : 会产生完全相同的结果。如果没有反斜杠,它会执行以下操作:

Makefile:6: *** target pattern contains no `%'.  Stop.

我怀疑这可能:参见关于 Makefile 中冒号的讨论 http://lists.gnu.org/archive/html/bug-make/2004-10/msg00010.html。总之,GNU make 从来不能很好地处理包含空格或冒号的文件名。维护者 Paul D. Smith 表示,增加对转义的支持往往会破坏现有的 makefile http://lists.gnu.org/archive/html/help-make/2004-06/msg00146.html。此外,添加此类支持需要对代码进行重大更改。

您也许可以通过某种令人讨厌的临时文件安排来解决问题。

祝你好运!

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

在 Makefile 中转义文件名中的冒号 的相关文章

  • make:无需为“all”执行任何操作

    我正在通过一个eg pgm 来创建一个make 文件 http mrbook org tutorials make http mrbook org tutorials make 我的文件夹eg make creation包含以下文件 des
  • %config(noreplace) 文件上出现意外的 RPM 冲突

    我正在创建我自己的RPM using rpmbuild My RPM 包含配置文件哪个应该永远不会被覆盖 即使 RPM 包含这些配置文件的新版本 为了存档这个 我用以下标签标记了它们 config noreplace opt mypacka
  • 在 bash 中快速引用 stdout(即上一个命令的输出)?

    有没有办法快速 例如通过键盘快捷键等 引用写入到 stdout 的上一个命令的输出 例如 如果我这样做 which rails 它回来了 usr local bin rails然后我想在 textmate 中打开该文件 我可以像这样重新输入
  • X 服务器使用什么像素格式?

    X 服务器使用什么像素格式 RGBA ARBG BGRA 如果有任何特定格式的话 Update 我专门寻找有关颜色分量顺序和位模式的信息 你的意思是帧缓冲区格式 或者所有支持的像素图格式 无论是哪一种 都取决于您的图形硬件 驱动程序和配置
  • '>&0' 有用途吗(重定向到标准输入)?

    在 bash 中你可以这样做 echo test gt 1 重定向到标准输出 尽管它已经到那里了 echo test gt 2 重定向到标准错误 echo test gt 0 重定向到标准输入 当我做最后一个时 我的终端仍然打印test就像
  • 将 libpng 链接到 android 原生项目

    我在尝试在本机 Android 项目中加载 libpng 时遇到问题 编译器似乎无法识别 libpng 函数 但可以识别类型 如 png byte 它可以正常编译类型 但如果我添加函数 则会抛出错误 这是编译输出 Windows 7 cmd
  • 为什么 ls -l 中的“总计”加起来不等于列出的总文件大小? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 为什么是total在输出中ls l打印为64并不是26078列出的所有文件的总数是多少 ls l test ls total 64 rw
  • 链接器失败:存档中的成员不是对象

    我正在尝试在 Windows 7 上使用 64 位 mingw 构建 Open CASCADE 6 7 1 库 我正在使用x86 64 4 9 1 release posix seh rt v3 rev1 from mingw w64 项目
  • Amazon EC2 的替代工具?

    Amazon 与 EC2 交互的官方工具有点笨重且难以处理 我必须设置一堆环境变量 为 EC2 存储单独的私钥 向我的 PATH 添加额外的项目 等等 它们都输出制表符分隔的行 长度为数百个字符 没有标题 因此解释它们有点困难 他们关于设置
  • 将 make 与 msysgit 一起使用

    我在 Windows 7 上使用 msysgit 但它似乎没有附带 make 有没有一种简单的方法可以让 make 在 msysgit 上运行 我找到了一个link to make exe http repo or cz w msysgit
  • 为什么 **sort** 不在每台机器上进行相同的排序?

    使用相同的sort具有相同输入的命令在不同的机器上产生不同的结果 我该如何解决这个问题 The man page http developer apple com documentation Darwin Reference ManPage
  • 如果文件没有行尾字符,则 wc -l 不计算文件的最后一个

    我需要计算 unix 文件的所有行数 该文件有 3 行 但是wc l仅给出 2 个计数 我知道它不计算最后一行 因为它没有行尾字符 任何人都可以告诉我如何计算这一行吗 grep c返回匹配行的数量 只需使用一个空字符串 作为您的匹配表达式
  • Makefile:如何正确包含头文件及其目录?

    我有以下 makefile CC g INC DIR StdCUtil CFLAGS c Wall I INC DIR DEPS split h all Lock o DBC o Trace o o cpp DEPS CC o lt CFL
  • 如何从 Unix 文件中删除空行

    我需要从输入文件中删除所有空白行并写入输出文件 这是我的数据如下 11216 33 1032747 64310 1 0 0 1 878 0 0 0 1 1 1 087 5 1 1 18 JAN 13 000603221321 11216 3
  • 如何同时正确使用管道和信号?

    我有 2 个孩子 我想将信号从孩子发送到父母 并将答案 随机数 为什么 为什么不 命名管道从父母发送到每个孩子 我有这个代码 include
  • 如何在 Makefile 中自动创建(和删除)临时目录?

    是否可以有make在执行第一个目标之前创建一个临时目录 也许使用一些黑客 一些额外的目标等 Makefile 中的所有命令都可以引用自动创建的目录 TMPDIR 并且该目录将被自动删除make命令结束 以前的这些答案要么不起作用 要么看起来
  • 如何处理GNU make中的子make错误?

    我在 Makefile GNU 中使用子 make 但每当子 make 失败时 主 make 都会继续成功运行 我希望每当我的子 make 失败时我的主 Makefile 都会失败 我怎么做 all pushd STA DIR make c
  • unix 下日期字段排序

    我有包含数十万条记录的文本文件 其中一个字段是日期字段 有没有办法根据日期字段对文件进行排序 09 APR 12 04 08 43 632279000 AM 19 MAR 12 03 53 38 189606000 PM 19 MAR 12
  • 安装python启动文件

    我如何安装pythonstartup文件 以便它在命令上运行 例如python myfile py 我尝试将其安装到我的 home myuserUbuntu的目录 但它说我没有足够的权限 此外 不同的地方交替说它应该全部大写或全部小写 前面
  • 使用 Makefile 项目在 Visual Studio 中自定义调试命令

    我在 Visual Studio 2010 中有一个由 Makefile 支持的项目 实际上使用 NAnt 但这不是重点 构建过程的输出是一个 elf 文件 我有一个单独的非 VStudio 调试器 可以在该 elf 文件上运行来调试它 构

随机推荐

  • 将矩阵图像定位在图像视图的中心

    我创建了一个图像库 一切正常 需要放大和移动图像 ImgView setScaleType ImageView ScaleType MATRIX 当我这样做时 我得到的图像很小 所以我调用了该方法 scaleFactor view getW
  • C# 将函数源代码转换为字符串

    在 C 中 有没有办法将函数的源代码转换为字符串 有点像 JavaScript 中的实现方式 我需要这个 因为我正在为 Asp Net 控件编写一些文档 并且希望在结果旁边显示原始源代码 而不是复制 粘贴它 简短的回答 不 长答案 您可以使
  • android 上的 chromium 中的 kiosk 模式或全屏模式

    我已经为我的 Android 设备构建了一个 chromium ContentShell 如下所述 https code google com p chromium wiki AndroidBuildInstructions https c
  • plpgsql CREATE FUNCTION 在“CREATE”处或附近出现语法错误

    即使我清空所有 DECLARE 块和 BEGIN END 块并尝试返回一个字符串 似乎也无法将此函数创建为 Create 谁能帮我解决我在这里做错的事情吗 尝试在 pgAdminIII Ubuntu 中执行此命令 CREATE OR REP
  • 如何获取给定字符串中数字字符的总数? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 如何计算字
  • 每个标记的可变宏扩展

    假设我有一个宏 一个只调用函数的简单宏foo对于不同类型 define FOO type foo type 一次 假设我想将这个东西称为多种不同类型 具体来说 foo int foo float foo point2d 我想用一个名为的宏生
  • Docker-compose 默认排除服务

    如果我在 docker compose 项目中定义了很多服务 如何从默认服务中排除某个服务docker compose up命令 例如 我有一个 nginx 服务和一个 ssl 服务 它们发生冲突 因为它们都消耗端口 80 所以我怎样才能使
  • Java 模式在“ABC”中查找两组两个字母

    我有一个这样定义的模式 private static final Pattern PATTERN Pattern compile a zA Z 2 在我的代码中我正在这样做 Matcher matcher PATTERN matcher m
  • 我想在android中读取图像中的exif信息。我可以从图库中的图像读取 exif,但无法读取从相机拍摄的 exif 照片

    如上图所示 我选择的是拍照 exif信息为空 我从手机选项中选择了图像 并且 exif 信息不为空 现在可以通过 ExifInterface 支持库从流中读取 EXIF 数据 compile com android support exif
  • textarea 的 window.getSelection() 在 Firefox 中不起作用?

    我正在尝试获取 HTML 页面上的选择文本 我使用下面的代码 并且window getSelection 文本区域接缝在 Firefox 中不起作用 但在 Google Chrome 中运行良好 我使用的是 Firefox 24 和 chr
  • 在android中安装应用程序时创建文件夹

    我们可以在应用程序安装期间在设备的内部存储上创建一个目录吗 创建该目录后 我需要将一些图像和音乐从我们的 res 文件夹复制到该目录 有人对在安装时创建目录有什么想法吗 提前致谢 public void onCreate Bundle sa
  • 如何查看用C/C++编写的函数的源代码? [复制]

    这个问题在这里已经有答案了 一般来说 用 R 编写的函数的源代码只需在 R 控制台上输入函数名称即可查找 对于用 C 或 C 编写的函数如何做到这一点 例如当我尝试查找代码时lapply 函数 它向我展示了这个 function X FUN
  • 减少寻找 N 线交点所需的时间

    有N水平或垂直的线段 现在我需要找出交点总数和每条线段的交点总数 N可以达到100000 我尝试检查每一对线 答案是正确的 但我需要减少它所花费的时间 这是我的代码 using namespace std typedef struct Po
  • 在 Android 中检查并启用磁传感器校准

    我在 Android 应用程序中使用磁传感器校准来实现增强现实 当应用程序长时间使用时 传感器校准会逐渐减少 有没有办法检查校准并自动启用或提示用户再次进行手动校准 不幸的是 对于 AR 类型的应用程序 我不知道如何知道磁传感器是否已正确校
  • Find_by_sql 作为 Rails 范围

    Sitepoint 的 r937 非常友善地帮助我找出从数据库返回正确结果所需的查询 我需要的是能够使用这个查询作为范围 并且能够将其他范围链接到这个范围上 查询是 SELECT coasters FROM SELECT order rid
  • JavaScript:“函数体后缺少 } 语法错误”

    好吧 你知道这个错误了 但是我到底为什么会收到这个错误呢 当它在本地运行时 我根本没有收到任何错误 但是当我上传我的项目时 我遇到了这个恼人的语法错误 我已经检查过Firebug https en wikipedia org wiki Fi
  • dplyr 和 tidyr - 使用因子一次性计算大量线性模型

    在阅读了 tidyverse 的更多内容后 我开始立即拟合许多线性模型 如中所述this https blog rstudio org 2016 02 02 tidyr 0 4 0 也就是说 我会按照以下方式做一些事情 library dp
  • 声明具有未知大小目标 c 的对象 X 的数组

    我将如何在 h 文件中声明一个未知大小的数组 我将在类内的 a 函数中计算该数组 例如 我可能有 20 或 30 个 NSArray 只是一个例子 不是我需要的 但是当第一次调用该类时我不会知道确切的数量 在实施文件中 id init if
  • iOS8 模拟器上缺少键盘?

    我正在模拟器中针对 iOS8 检查我的应用程序 令我困惑的一件事是 当我点击 UITextField 或 UITextView 时 键盘不会出现在屏幕上 我仍然可以使用硬件键盘输入文本 此外 如果输入元素具有 inputAccessoryV
  • 在 Makefile 中转义文件名中的冒号

    有没有办法让 GNU make 正确处理包含冒号的文件名 我遇到的具体问题恰好涉及模式规则 这是一个不依赖于剪切和粘贴制表符的简化版本 make version GNU Make 3 81 Copyright C 2006 Free Sof