Makefile:选择正确的文件

Makefile:选择正确的文件,makefile,gnu-make,Makefile,Gnu Make,我有一个包含数千个媒体文件和以下文件结构的源代码: files/module/file.vid files/module/lang/file.vid 如果存在“files/module/lang/file.vid”,我想按原样将其复制到目标 如果没有,我想将“文件/module/file.vid”复制到目标中的“文件/module/lang/file.vid” 如何使用makefile实现这一点 PS:更准确地说,解决方案是否适合下面的当前部分 $(foreach lang,$(filter-

我有一个包含数千个媒体文件和以下文件结构的源代码:

files/module/file.vid
files/module/lang/file.vid
如果存在“
files/module/lang/file.vid
”,我想按原样将其复制到目标

如果没有,我想将“
文件/module/file.vid
”复制到目标中的“
文件/module/lang/file.vid

如何使用makefile实现这一点

PS:更准确地说,解决方案是否适合下面的当前部分

$(foreach lang,$(filter-out en-US,$(gb_HELP_LANGS)),$(eval $(call gb_AllLangPackage_add_files_for_lang,helpcontent2_html_media_lang,$(lang),$(LIBO_SHARE_HELP_FOLDER)$(if $(HELP_ONLINE),/$(PRODUCTVERSION))/media, \

files/scalc/$(lang)/imtrigon.vid \

files/scalc/$(lang)/trigon.vid \

files/scalc/$(lang)/pivot.vid \

files/scalc/$(lang)/functions_ifs.vid \
 )))
谢谢

您可以这样做:

VIDDIR := files/module
LANGDIR := $(VIDDIR)/lang
TARGETDIR := target

VIDFILES := $(notdir $(wildcard $(VIDDIR)/*.vid))

TARGETVIDS := $(addprefix $(TARGETDIR)/,$(VIDFILES))
LANGVIDS := $(addprefix $(LANGDIR)/,$(VIDFILES))

all: $(TARGETVIDS) $(LANGVIDS)

$(TARGETDIR)/%.vid : $(LANGDIR)/%.vid
        cp $< $@

$(LANGDIR)/%.vid: $(VIDDIR)/%.vid
        cp $< $@
VIDDIR:=文件/模块
LANGDIR:=$(VIDDIR)/lang
TARGETDIR:=目标
VIDFILES:=$(notdir$(通配符$(VIDDIR)/*.vid))
TARGETVIDS:=$(添加前缀$(TARGETDIR)/,$(视频文件))
LANGVIDS:=$(addprefix$(LANGDIR)/,$(VIDFILES))
全部:$(TARGETVIDS)$(LANGVIDS)
$(TARGETDIR)/%.vid:$(LANGDIR)/%.vid
cp$<$@
$(LANGDIR)/%.vid:$(VIDDIR)/%.vid
cp$<$@

我不明白你所说的“复制到目标”或“复制到目标”是什么意思。“target”是您在这里没有描述的其他目录吗?是的,target是构建的目标目录。