如何解决使用 make 仅复制已更改的文件
我有一个包含很多头文件 (.h) 的文件夹,要安装我们的库,我需要将这些文件复制到系统文件夹中。但是,我只想复制已更改的文件。我如何只使用 make 和 cp 来做到这一点,而不必使用任何其他工具,例如 rsync?
解决方法
你可以使用这样的结构:
/path/to/system/header.h: /path/to/local/header.h
cp $^ $@
如果本地版本较新,则将本地标头复制到系统标头。
如果你有 GNU make,就像在 Ubuntu 上一样,你可以像这样创建花哨的函数。
它将更新的头文件从目录 SRCDIR 复制到 DSTDIR。通过运行 make all
来尝试一下。它应该只复制较新的文件,在第二次运行时什么也不做。
.DEFAULT_GOAL = all
SRCDIR = local
DSTDIR = system
HEADERS = $(shell cd $(SRCDIR); ls *.h)
# Define function; $(1) is the header file name.
define copyheader =
$(DSTDIR)/$(1): $(SRCDIR)/$(1)
cp $$^ $$@
endef
# Use function to create recipes for each header file.
$(foreach file,$(HEADERS),$(eval $(call copyheader,$(file))))
# Depend on all destination headers.
all: $(addprefix $(DSTDIR)/,$(HEADERS))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。