我在子目录中有一些源文件:
$ ls subdir
foo.x bar.x other_file
现在我想创建一个像
这样的规则subdir/%.y: subdir/%.x
cmd $< -a option -o $@
只需将cmd
工作目录设置为subdir
。
我想要一些如果需要subdir/bar.y
则会生成类似
cd subdir && cmd bar.x -a option -o bar.y
是否有一种说法$<
和$@
但没有前导subdir/
的方法?
答案 0 :(得分:2)
如果您使用的是GNU make,则可以使用$(notdir $<)
和$(notdir $@)
来获取没有目录的文件名。您可以使用$(dir $@)
获取目录部分:
subdir/%.y: subdir/%.x
cd $(dir $@) && cmd $(notdir $<) -a option -o $(notdir $@)
或硬编码子目录,如果您愿意。
答案 1 :(得分:2)
您可以分别使用F
或D
后缀作为文件和目录部分。
subdir/%.y: subdir/%.x
cd $(@D) && cmd $(<F) -a option -o $(@F)
有关详细信息,请参阅manual。
答案 2 :(得分:0)
使用$(patsubst)怎么样?
subdir/%.y: subdir/%.x
cd subdir && cmd $(patsubst subdir/%,%,$<) -a option -o $(patsubst subdir/%,%,$@)
或者,相当但更简单:
subdir/%.y: subdir/%.x
cd subdir && cmd $(<:subdir/%=%) -a option -o $(@:subdir/%=%)