linux - 使用 make 压缩子文件夹中的特定文件

标签 linux bash makefile zip

我有一个 makefile,我想在其中将几个文件压缩在一起,但使用一个子文件夹作为 zip 文件的根目录。目前我正在使用这个:

 kountdown.zip: $(SRCS)
     cd $(SRCDIR) && zip -r --filesync ../kountdown.zip .

$(SRCS) 是我在 $(SRCDIR) 中的源文件列表。这可行,但我只想将 $(SRCS) 中的文件包含在 zip 文件中,而不是整个目录。问题是 $(SRCS) 中的路径是相对于 makefile 的位置,而不是 $(SRCDIR)。我可以为相对于 $(SRCDIR) 的路径创建第二个变量,但我想避免重复列表。理想情况下,我想要一种在当前目录中运行 zip 的方法,但使用子目录作为 zip 文件的根目录。但是从我所有的搜索来看,这似乎是不可能的。有任何想法吗?

我正在使用 linux。

最佳答案

这个怎么样:

 kountdown.zip: $(SRCS)
     cd $(SRCDIR) && zip -r --filesync ../kountdown.zip $(subst $(SRCDIR)/,,$(SRCS))

假设 $(SRCDIR) 中还没有 /。如果是,请将其从上面的 subst 语句中删除。

这也应该有效:

 kountdown.zip: $(SRCS)
     cd $(SRCDIR) && zip -r --filesync ../kountdown.zip $(patsubst $(SRCDIR)/%,%,$(SRCS))

关于linux - 使用 make 压缩子文件夹中的特定文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20715476/

相关文章:

linux - 如何让终端建议自定义命令的选项?

linux - 如何让 grep 搜索我放入变量中的任何数字?

php - 如何停止 PHP 脚本?阻止发送电子邮件?

mysql - 执行 mysql 命令的脚本无法与 cron 作业一起使用

java - 使用带有 PS4 集的 java 在 Debug模式下运行 bash 脚本

c - "skipping incompatible"conftest错误

Linux USB 恐怖

mysql - 无法从命令行访问 MySQL

makefile - 制作 : Setting target-specific variables in static pattern rules

c - ExtUtils::MakeMaker 包括外部 *.mk 并使用 *.mk 文件中的定义用于 WriteMakefile 中的 LIBS 和 INC 参数