【发布时间】:2012-03-07 12:20:13
【问题描述】:
当我创建模式化规则或其他一些自定义规则时,我需要能够处理不存在的目标目录。这适用于在源目录本身以外的目录中构建项目时。
例如:
%.out: %.in
gen_file.sh $< > $@
问题是当有人在依赖项中指定路径时:
some_target: some/path/sample.out
这会失败,因为some/path 目录不存在。
有没有标准的方法来创建这个目录?
注意:我现在正在尝试使用 mkdir,但是在获取目录名而不是文件名时遇到了问题。可能只是一个逃避问题。更新:让它与@mkdir -p $(shell dirname $@) 一起工作这不太可能是可移植的。
【问题讨论】:
-
您的
mkdir -p解决方案对我来说看起来不错,除非您愿意解决根本原因(不要在不存在的目录中命名目标)。 -
没有根本原因。我正在与应该支持的源目录不同的目录中构建。标准目标,如 "%.o: %.c" 也必须以某种方式创建目录。
-
所以
some_target: $(top_srcdir)/some/path/sample.out不起作用?