源和对象后缀相同时如何指定makefile依赖?
How to specify makefile dependencies when source and object suffixes are the same?
我正在使用 GNU Make 4.0 在 IBM i 上编译对象。大多数项目都正常且无冲突(.c
编译为 .module
,.pf
编译为 .file
),但有几种类型的项目使用相同的文件名后缀来源和对象。例如,对于源代码和编译后的命令对象,命令以 .cmd
结尾。这导致生成文件定义如下:
C_CODE1.MODULE: C_CODE1.C # This is ok -- no conflict
COMMAND1.CMD: COMMAND1.CMD # Error! Make thinks it's a circular dependency.
如何告诉Make左边的.cmd
项和右边的项实际上是两个不同的项?对象后缀由操作系统固定,不能更改。源代码后缀可以更改,但如果不进行自定义,它们将无法在我们的代码编辑器中正确显示。源代码确实存在于与对象不同的目录中,但在 makefile 中并没有真正指定路径,除了在设置 VPATH 时。
如果目标名称不必符合先决条件,我会将目标名称更改为其他名称,例如 COMMAND1: COMMAND1.CMD
。
如果必须匹配它们,那么我会像下面这样写,以在配方中明确添加扩展名。
COMMAND1 : COMMAND1.CMD
cat $< > ${@}.CMD
对于源,即使您使用的是传统源文件,也没有必要使用标准源成员类型。您可以使用 CMDSRC 作为命令源的源成员类型。
我正在使用 GNU Make 4.0 在 IBM i 上编译对象。大多数项目都正常且无冲突(.c
编译为 .module
,.pf
编译为 .file
),但有几种类型的项目使用相同的文件名后缀来源和对象。例如,对于源代码和编译后的命令对象,命令以 .cmd
结尾。这导致生成文件定义如下:
C_CODE1.MODULE: C_CODE1.C # This is ok -- no conflict
COMMAND1.CMD: COMMAND1.CMD # Error! Make thinks it's a circular dependency.
如何告诉Make左边的.cmd
项和右边的项实际上是两个不同的项?对象后缀由操作系统固定,不能更改。源代码后缀可以更改,但如果不进行自定义,它们将无法在我们的代码编辑器中正确显示。源代码确实存在于与对象不同的目录中,但在 makefile 中并没有真正指定路径,除了在设置 VPATH 时。
如果目标名称不必符合先决条件,我会将目标名称更改为其他名称,例如 COMMAND1: COMMAND1.CMD
。
如果必须匹配它们,那么我会像下面这样写,以在配方中明确添加扩展名。
COMMAND1 : COMMAND1.CMD
cat $< > ${@}.CMD
对于源,即使您使用的是传统源文件,也没有必要使用标准源成员类型。您可以使用 CMDSRC 作为命令源的源成员类型。