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

时间:2016-10-21 23:59:25

标签: makefile ibm-midrange

我使用GNU Make 4.0在IBM i上编译对象。大多数项目都没问题且没有冲突(.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.

可以做些什么告诉左边的.cmd项目和右边的项目实际上是两个不同的项目?对象后缀由操作系统修复,不能更改。源代码后缀可以更改,但是如果没有自定义,它们就不会在我们的代码编辑器中正确显示。源代码确实存在于与对象不同的目录中,但除了设置VPATH之外,还没有在makefile中指定路径。

2 个答案:

答案 0 :(得分:1)

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

如果必须匹配,那么我会按照以下内容编写,以在配方中明确添加扩展名。

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

答案 1 :(得分:0)

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