我正在尝试使用GNU Make 4.0创建一个Makefile,但遇到了问题。这是在QP2TERM PASE环境中的IBM i 7.2版上。文件类型在此平台上是非标准的。每个源文件都以“.mbr”结尾;源代码类型可以通过包含该代码的目录名称来收集。所以C代码在目录QCSRC中,C头在目录H中,RPG代码在目录QRPGLESRC中。源代码被编译成模块,模块被合并到程序中。为简单起见,此测试仅尝试将一个源文件编译为模块。
all: file1.module
file1.module: file1.mbr
system "(compile instruction here...)"
make all
的结果是make: 1254-002 Cannot find a rule to create target file1.mbr from dependencies.
因此,似乎Make没有意识到* .mbr是源文件。我如何告诉它以.mbr结尾的任何内容都是源文件?更好的是,我如何告诉它在目录QCSRC中以.mbr结尾的任何内容都是C源代码,在目录QRPGLESRC中以.mbr结尾的任何内容都是RPG源代码,所以我可以指定相关的编译指令?
我在定义.SUFFIXES方面取得了一些有限的成功,但Make手册说应该使用模式规则。我试了这个没有成功:
all: file1.module
%.module: qrpglesrc/%.mbr
system "(compile instruction here...)"
但现在给出的错误是make: 1254-002 Cannot find a rule to create target file1.module from dependencies.
答案 0 :(得分:0)
如果您的make
计划是POSIX compatible,那么您可以使用.SUFFIXES
特殊目标并设置合适的inference rules。
例如,您可以使用(仅限伪)
.SUFFIXES: .suffix_used_to_create_mbr_files
.suffix_used_to_create_mbr_files:
command-to-create-mbr-file