【发布时间】:2021-03-10 08:23:38
【问题描述】:
我有一个包含很多头文件 (.h) 的文件夹,要安装我们的库,我需要将这些文件复制到系统文件夹中。但是,我只想复制已更改的文件。我怎样才能只使用 make 和 cp 来做到这一点,而不必使用任何其他工具,例如 rsync?
【问题讨论】:
-
您使用的是哪个操作系统?哪个
make实现? GNU make 有一些特性使这更容易。
我有一个包含很多头文件 (.h) 的文件夹,要安装我们的库,我需要将这些文件复制到系统文件夹中。但是,我只想复制已更改的文件。我怎样才能只使用 make 和 cp 来做到这一点,而不必使用任何其他工具,例如 rsync?
【问题讨论】:
make 实现? GNU make 有一些特性使这更容易。
你可以使用这样的结构:
/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))
【讨论】:
make 的实现。使用 GNU make 轻而易举。您使用的是什么操作系统和品牌?
make --version)。请参阅我编辑的答案。