当源后缀和对象后缀相同时,如何指定makefile依赖项?

当源后缀和对象后缀相同时,如何指定makefile依赖项?,makefile,ibm-midrange,Makefile,Ibm Midrange,我正在使用GNUMake4.0在IBMi上编译对象。大多数项都正常且无冲突(.c编译为.module,.pf编译为.file),但有几种类型的项对源和对象使用相同的文件名后缀。例如,对于源代码和已编译的命令对象,命令以.cmd结尾。这将生成如下的makefile定义: C_CODE1.MODULE: C_CODE1.C # This is ok -- no conflict COMMAND1.CMD: COMMAND1.CMD # Error! Make thinks it's a c

我正在使用GNUMake4.0在IBMi上编译对象。大多数项都正常且无冲突(
.c
编译为
.module
.pf
编译为
.file
),但有几种类型的项对源和对象使用相同的文件名后缀。例如,对于源代码和已编译的命令对象,命令以
.cmd
结尾。这将生成如下的makefile定义:

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
项和右侧的项实际上是两个不同的项?对象后缀由操作系统固定,不能更改。源代码后缀可以更改,但如果没有自定义,它们将无法正确显示在我们的代码编辑器中。源代码确实存在于与对象分离的目录中,但除了在设置VPATH时,在makefile中没有真正指定路径。

如果目标名称不必匹配先决条件,我会将目标名称更改为其他名称,例如
COMMAND1:COMMAND1.CMD

如果必须匹配它们,那么我将编写如下代码,在配方中显式添加扩展

COMMAND1 :  COMMAND1.CMD 
     cat $< > ${@}.CMD 
COMMAND1:COMMAND1.CMD
cat$<>${@}.CMD

对于源,即使您使用的是传统的源文件,也不必使用标准源成员类型。您可以使用say CMDSRC作为命令源的源成员类型。

您的源是流文件还是“本机”源文件,即/QSYS.LIB/SMEEPLIB.LIB/QCMDSRC.FILE/COMMAND1.MBR?了解这一点很有趣,因为传统的开发人员将在本机源文件上使用工具,这些文件非常希望源成员类型与预先确定的列表匹配。如CMD、PF、RPGLE等。如果源文件位于IFS(流文件)中,则可以将文件扩展名从.CMD更改为.cmdsrc,因为传统工具不会查看文件扩展名。更大的问题是:您需要与其他开发人员协调吗?如果目标和先决条件之间的唯一区别是路径名,那么您必须将路径名放入makefile中,至少对于这些规则是这样的。@BuckCalabro源是流文件,并使用RDi期望的文件扩展名(.RPGLE、.CLLE等)。我曾经尝试过命名命令source
.CMDSRC
,但RDi(或LPEX?)不知道如何使用它。RDi可能可以定制为理解
.CMDSRC
,但我一直试图尽可能让事情简单化,这样新开发人员就可以直接加入并开始编码,而无需进行大量特殊设置。将有几个人在处理此代码。谢谢。我知道从技术上讲,任何文件扩展名都可以使用(我们的代码在IFS中),但是我很难让RDi识别新命名的文件。在远程系统资源管理器中,源文件确实显示为铅笔图标,但它在编辑器中仅作为纯文本文件打开,无需特殊解析。常规>编辑器>文件关联有一个
*.cmdsrc
条目,常规>内容类型和LPEX编辑器>解析器>解析器关联也是如此。不管怎样,解决我的问题的方法似乎是为这些麻烦的文件类型更改源文件扩展名。将军→ 编辑→ 文件关联,定义为与
*.cmdsrc
相同。将军→ LPEX编辑器→ 解析器→ 解析器关联,定义为
CMDSRC
CMDSRC
CMD
CMD
相同。我还将
*.cmdsrc
定义为通用→ 内容类型→ 正文→ 企业源类型→ 命令定义,但不确定是否需要。在这些更改之后,RDi顽固地无法正常工作,直到我右键单击.CMDSRC并选择“使用远程系统LPEX编辑器打开”启动它。