当我创建图案化规则或其他一些自定义规则时,我需要能够处理不存在的目标目录。这适用于在源目录本身以外的目录中构建项目时。
例如:
%.out: %.in
gen_file.sh $< > $@
问题是当有人在依赖项中指定路径时:
some_target: some/path/sample.out
此操作失败,因为some/path
目录不存在。
是否有标准方法可以创建此目录?
注意:我现在正在尝试使用mkdir,但是在获取目录名而不是文件名方面存在问题。可能只是一个逃避问题。更新:让这与@mkdir -p $(shell dirname $@)
一起使用这不太可移植。
答案 0 :(得分:2)
automake
执行此操作的方式是使任何可能依赖于不存在的目录的内容取决于目标some/dir/.dirstamp
。以下模式规则应涵盖:
%/.dirstamp:
mkdir -p $(@D)
touch $@
另请注意使用$(@D)
获取$@
的目录部分。这意味着您不必使用$(shell dirname $@)
(或GNU Make内置$(dir $@)
)。有关详情,请参阅the GNU Make manual。