makefile - Make - 如何将两个不同的文件复制到不同的位置
问题描述
我不熟悉makefile语法。我想将 2 个文件复制到不同的位置。
DST := c:/A/a.txt \
c:/B/b.txt \
SRC := c:/src/1.bin \
c:/src/2.bin \
all: $(DST)
$(DST): $(SRC)
cp -f $< $@
上面的代码不起作用,因为 $< 是第一个先决条件。使用 $^ 也不正确。我怎样才能实现它?谢谢你。
解决方案
如果源文件和目标文件之间没有任何可用的关系,并且您更喜欢使用比其他答案中建议的更标准/不那么棘手的规则集,那么您只需手动写出依赖关系,像这样的东西:
DST := c:/A/a.txt \
c:/B/b.txt \
all: $(DST)
$(DST) :
cp -f $< $@
c:/A/a.txt : c:/src/1.bin
c:/B/b.txt : c:/src/2.bin
这确实需要您复制 DST 值(一次在变量中,一次作为目标),但您只需要编写一次规则。
还有另一种可能性,这很棘手,但不依赖于外部 shell 程序,如seq
. 它将要求您通过变量定义关系,并且要求所有目标文件位于同一驱动器上。它看起来像这样:
DST_/A/a.txt := c:/src/1.bin
DST_/B/b.txt := c:/src/2.bin
(makefile 中不能有其他以 开头的变量DST_
;如果这还不够好,请选择一些唯一的前缀)。
然后makefile的其余部分将是:
DST := $(foreach V,$(filter DST_%,$(.VARIABLES)),c:$($V))
all: $(DST)
.SECONDEXPANSION:
$(DST) : c:% : $$(DST_$$*)
cp -f $< $@
(公平的警告,我实际上并没有对此进行测试,所以可能会有一些错别字:))
推荐阅读
- reactjs - Moving placeholder text in Autocomplete component in React
- xamarin.forms - Xamarin Forms: Issue with MediaElement audio playing
- javascript - How to fetch selected option in javascript for more than one dropdowns
- javascript - 从角度的大子组件更新祖父组件中的布尔属性
- c# - 如何在 Blazor WASM 项目中动态下载和呈现程序集?
- android - 如何在导航组件中打开片段的多个实例?
- python-3.x - Pyinstaller:Linux 可执行文件给出语法错误:意外的“(”?
- angular - 如何组合 2 个可观察对象并根据 Angular 8 中的特定条件发出值
- laravel - Laravel 在安装 vue 和 npm run dev 时出错
- python - Python mixins 中的主类类型