1

我在子目录中有一些源文件:

$ 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/

4

3 回答 3

2

如果你使用 GNU make,你可以使用$(notdir $<)and$(notdir $@)来获取没有目录的文件名。您可以使用$(dir $@)获取目录部分:

subdir/%.y: subdir/%.x
        cd $(dir $@) && cmd $(notdir $<) -a option -o $(notdir $@)

或者硬编码子目录,如果你愿意的话。

于 2013-04-07T23:36:00.367 回答
2

您可以分别对文件和目录部分使用FD后缀。

subdir/%.y: subdir/%.x
    cd $(@D) && cmd $(<F) -a option -o $(@F)

有关详细信息,请参阅手册

于 2013-04-07T23:38:17.127 回答
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/%=%)
于 2013-04-07T23:45:26.840 回答