如何在 Makefile 中将带引号的字符串转换为普通字符串?

2024-04-15

我不确定我是否正确描述了这个问题,但目前我正在通过以下方式解决这个问题

QUOTEDSTR := "hello world"
NORMALSTR := $(shell echo $(QUOTEDSTR))

是否有一种更内置的方法可以让“make”在不调用 shell 的情况下完成此操作?谢谢


另外一个选择:

NORMALSTR := $(patsubst "%",%,$(QUOTEDSTR))

Beta 的答案将删除字符串中的每个引号。上述解决方案只会删除出现在开头和结尾的引号。例如:

QUOTEDSTR := -DTITLE=\"Title\"

Beta 的答案将得出以下值-DTITLE=\Title\使用 patsubst 解决方案时,该值不会改变。

这取决于你想要什么。

EDIT

如果你想处理空格并且仍然只匹配变量开头/结尾处的引号(按照 @stefanct 的评论),你就必须玩一些技巧。首先,您需要找到一个您知道永远不会出现在字符串中的非空白字符。我们来选择一下^但如果您愿意,您可以选择其他内容。

该算法是:将所有空格转换为该字符,然后从生成的单个“单词”中删除引号,然后将该字符的所有实例转换回空格,如下所示:

# Get a variable S that contains a single space
E :=
S := $E $E

NORMALSTR := $(subst ^,$S,$(patsubst "%",%,$(subst $S,^,$(QUOTEDSTR))))

当然,仍然存在一些复杂的情况;例如,这仅处理空格,而不处理其他空白字符(如 TAB)。

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

如何在 Makefile 中将带引号的字符串转换为普通字符串? 的相关文章

  • GNU shell 函数在意外标记“(”附近出现语法错误

    我想确定我的 makefile 中 Intel Fortran 编译器的版本 因此我添加了一些脚本GNU shell功能如下进行测试 VERIFORT shell ifort version VERIFORT shell ifort ver
  • 从源代码构建 perl 时,configure 不生成 makefile

    我正在 Ubuntu 14 04 内核 3 13 0 24 generic 上从源代码构建 perl wget http www cpan org src 5 0 perl 5 22 2 tar gz tar xzf perl 5 22 2
  • 对于 Makefile 变量的每个目标

    我的 makefile 如下所示 apps app1 app2 app3 all dir app1 app2 app3 zip cleanup 现在我想在列表上做一些循环apps多变的 就像是 loop on apps endloop 是否
  • GNU make - 强制 PHONY 目标的依赖顺序

    我有一个如下的 Makefile 我关心的是依赖顺序up clean PHONY up up down docker compose up d PHONY up clean up clean down clean up PHONY down
  • 使用环境变量识别 Cygwin、Linux、Windows

    当 makefile 需要在不同的操作系统上运行并且应根据操作系统正确设置各种设置 转义 路径分隔符等 时 就会出现问题 第一种方法是使用 Windows COMSPEC ifneq COMSPEC ComSpec in windows e
  • 执行 [ FILE1 -ot FILE2 ] 在 make 和 shell 中产生不同的结果

    From Bash 初学者指南表 7 1 https tldp org LDP Bash Beginners Guide html sect 07 01 html 我们可以说 FILE1 ot FILE2 将产生True if FILE1比
  • MinGW C 编译器“无法编译简单的测试程序”

    我想将 MinGW 作为 C 编译器运行 MinGW 已从 Chocolatey 安装 调用是通过 CMake 从 gitlab runner 进行的 这失败了 cmake G MinGW Makefiles DCMAKE C COMPIL
  • 这些 g++“多重定义”错误是怎么回事?

    我正处于一个项目的早期阶段 请阅读 昨天刚刚开始 我正在设置我的初始 makefile 这非常简单 以下是该文件的完整内容 all main o resource o g o output exe main o resource o mai
  • C:创建静态库并使用 Makefile 进行链接

    我在尝试着了解静态和共享库 http randu org tutorials c libraries php 我想执行以下操作来创建一个单独编译和链接的 makefile 以便创建和链接静态库 形成最终的静态可执行文件 我有以下 Makef
  • 在 OS X 下将 ImageMagick 编译为 64 位?

    我正在尝试安装moddims http code google com p moddims 在 OS X 上 请参阅上一个问题 https stackoverflow com questions 1185106 how do i confi
  • 如何生成缺失的 #include 文件的列表

    背景 我正在开发一个大型 C 项目 其中包含多个可执行文件和库输出 以及一组工作 make 文件 即假设您拥有整个代码库 您可以输入 make 它将构建所有库和可执行文件 我的问题是我必须部分编译该项目 并且只需链接已为项目其他部分编译的库
  • rm -rf 与 -rm -rf

    在 Makefile 中 我读到 rm rf 而不是 rm rf Makefile 行开头的第一个 是什么意思 代表着make本身将忽略来自的任何错误代码rm In a makefile 如果任何命令失败 则make进程本身会停止处理 通过
  • makefile 中的路径不起作用

    我正在运行以下命令makefile哪些需要改变dir到特定目标并在那里运行npm install 问题是我能够在输出中看到它将目录 项目 应用程序 打印到正确的目录 但安装 npm install 在上层 项目 上运行 为什么 例如 当我运
  • Makefile 头依赖项

    我是使用 make 的新手 并且一直在通过以下方式学习基础知识本教程 http www cs colby edu maxwell courses tutorials maketutor 这是本教程中的最后一个 makefile 示例 IDI
  • 如何链接 ndk 应用程序中的任何库

    From 本教程 http marakana com forums android examples 49 html 看到我有一个预构建的静态库 名为stackoverflow a它有stackoverflow h 现在我想使用该静态库的功
  • make: *** 没有规则可以创建“all”所需的目标“gcc”。停止

    我正在通过一个eg pgm 来创建一个make 文件 http mrbook org tutorials make http mrbook org tutorials make 我的文件夹eg make creation包含以下文件 des
  • 在 Unix 中,我可以在目录中运行“make”而无需先 cd 到该目录吗?

    在 Unix 中 我可以运行make在没有的目录中cd首先进入该目录 make C path to dir
  • 对 sf:: 的未定义引用

    我想用 C 制作 GUI 应用程序 发现 SFML 是一个不错的选择 幸运的是 我使用的是 Linux 所以 SFML 2 4 已经安装在我的系统上 所以我开始搜索一些教程并找到了一个制作简单窗口的教程 但是当我运行代码时 出现错误 提示未
  • Makefile 和通配符

    好吧 这是我当前的 makefile 设置 有一些文件名为public01 c public02 c等等 我正在尝试使用以下方法为每个人制作目标文件public o带有通配符的标签 public o public c hashtable h
  • 从 Makefile 中的 C++FLAGS 中删除一个标志?

    我有一个 Makefile 其中包含另一个设置了很多默认值的 makefile 我无法编辑包含的 makefile 并且我想更改 makefile 中 C FLAGS 的值 即使它是在包含的 makefile 中设置的 具体来说 每当 de

随机推荐