【发布时间】:2021-02-24 00:55:39
【问题描述】:
我在变量 INPUT_FILES 中有一个包含用户指定输入文件的 Makefile。
对于每个输入文件,我需要创建一个输入文件素数。 一些注意事项:
- 每个输入文件都可以有任意文件位置
- 假设没有重复的文件名是合理的
- 每个输出文件都需要进入
$(OUTPUT_DIR)
我的基本策略是根据INPUT_FILES 生成一组目标,然后尝试确定哪个输入文件是目标的实际依赖项。
我尝试了一些变化:
# Create a list of targets
OUTPUT_FILES = $(foreach file,$(notdir $(INPUT_FILES)),$(OUTPUT_DIR)/$(file))
# This doesn't work, because all input files are dependencies of each output file
$(OUTPUT_FILES): $(INPUT FILES)
program --input $^ --output $@
# This doesn't work because $@ hasn't been resolved yet
$(OUTPUT_FILES): $(filter,$(notdir $@),$(INPUT FILES))
program --input $^ --output $@
# This doesn't work, I think because $@ is evaluated too late
.SECONDEXPANSION:
$(OUTPUT_FILES): $(filter,$(notdir $$@),$(INPUT FILES))
program --input $^ --output $@
# This doesn't work either
.SECONDEXPANSION:
$(OUTPUT_FILES): $$(filter,$(notdir $@),$(INPUT FILES))
program --input $^ --output $@
我也研究过静态模式规则,但我不确定它是否能满足我的需要。
【问题讨论】:
标签: makefile dependencies target