Makefile 为工作目录设置为此子目录的子目录中的文件制定规则

Makefile 为工作目录设置为此子目录的子目录中的文件制定规则,makefile,Makefile,我在子目录中有一些源文件: $ ls subdir foo.x bar.x other_file 现在我想创建一个规则,如 subdir/%.y: subdir/%.x cmd $< -a option -o $@ 例如,有没有一种方法可以说$如果您使用的是GNU make,您可以使用$notdir$如果您使用的是GNU make,您可以使用$notdir$您可以分别为文件和目录部分使用F或D后缀 subdir/%.y: subdir/%.x cd $(@D)

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

$ ls subdir
foo.x bar.x other_file
现在我想创建一个规则,如

subdir/%.y: subdir/%.x
        cmd $< -a option -o $@

例如,有没有一种方法可以说$如果您使用的是GNU make,您可以使用$notdir$如果您使用的是GNU make,您可以使用$notdir$您可以分别为文件和目录部分使用F或D后缀

subdir/%.y: subdir/%.x
    cd $(@D) && cmd $(<F) -a option -o $(@F)
有关详细信息,请参见。

您可以分别为文件和目录部分使用F或D后缀

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

有关详细信息,请参阅。

如何使用$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/%=%)

使用$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/%=%)