首页 > 解决方案 > 包含父文件夹`..`的目标

问题描述

如果我的 makefile 中的 preqequisite 引用了例如,则不会运行%/../some.file配方。%/../some.file

我的 makefile 包含一个食谱

dir/file:
  recipe

%/file2: %/../file
  recipe

其中 % 与dir/subdir. 如果我make dir/subdir/file2,抱怨它知道No rule to make target dir/subdir/file2。即使我make dir/subdir/../file,它也知道No rule to make target dir/subdir/../file。但是,如果 Imake dir/filemake dir/subdir/file2,一切正常。

显然,引用父目录在先决条件中有效,但在目标中无效。你知道如何解决这个问题吗?

标签: makefilegnu-make

解决方案


看起来 Make 确实将 '..' 字面上作为文件夹名称,而没有意识到它指的是父文件夹。因此“文件”与“子目录/../文件”不同。从技术上讲,这是真的,因为 'subdir' 可能是一个符号链接,但我找不到对此的任何引用。

helper解决方法:为每个文件夹添加依赖项

dir/%/../file: dir/file

它并不完美,因为 '%' 可以匹配 dir/x1/x2/file。但是根据源树的结构,它可能就足够了。

我注意到以下将起作用:

dir/subdir/../file: dir/file

但是只有当可以枚举的文件很少时它才会起作用。


推荐阅读