我使用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中指定路径。
答案 0 :(得分:1)
如果目标名称不必与先决条件匹配,我会将目标名称更改为其他名称,例如COMMAND1: COMMAND1.CMD
。
如果必须匹配,那么我会按照以下内容编写,以在配方中明确添加扩展名。
COMMAND1 : COMMAND1.CMD
cat $< > ${@}.CMD
答案 1 :(得分:0)
对于源,即使您使用的是传统源文件,也不必使用标准源成员类型。您可以使用说CMDSRC作为命令源的源成员类型。