在IBM i系统上,使用PASE(AIX模拟器),我尝试使用makefile编译RPG源。
我有RPG来源并尝试建立PGM计划。 每个源都将在不同的PGM中编译。
这是我首先尝试的语法
VPATH=.
SYSTEM=system -iv
CRTRPGMOD=CRTRPGMOD
BIN_LIB=MR_CH
CURRENT_PATH=/currentPath #${PWD} doesn't work
#With this line active, it works
SRC_RPGLE = src1.rpgle src2.rpgle
#With this line active, it doesn't work
#SRC_RPGLE = $(shell echo *.rpgle) #Should list every sources i want to compile
TARGETS = $(SRC_RPGLE:.rpgle=.rpgleMod) #Should list every program i want to build
.SUFFIXES: .rpgle .rpgleMod
.rpgle.rpgleMod:
$(SYSTEM) "$(CRTRPGMOD) MODULE($(BIN_LIB)/$(*F)) SRCSTMF('$(CURRENT_PATH)/$<')" > $(*F)_1_crtrpgmod.log
ln -fs $(*F).rpgMod
all: $(TARGETS)
我尝试使用GNU shell syntax
来应用AIX make command有什么建议吗?
答案 0 :(得分:3)
我不熟悉make
的AIX实现,但假设链接的手册页是它的全部内容,那么它看起来像是POSIX make
的简单实现(对于较旧的POSIX规范)。
因此,执行所需操作(扩展文件列表)的唯一方法是使用递归,以便您可以访问shell,如下所示:
SYSTEM=system -iv
CRTRPGMOD=CRTRPGMOD
BIN_LIB=MR_CH
CURRENT_PATH=/currentPath
CURRENT_PATH=/home/CHARLES/Projets/MRSRC/tmp
recurse:
$(MAKE) all SRC_RPGLE="`echo *.rpgle`"
TARGETS = $(SRC_RPGLE:.rpgle=.rpgleMod)
.SUFFIXES: .rpgle .rpgleMod
.rpgle.rpgleMod:
$(SYSTEM) "$(CRTRPGMOD) MODULE($(BIN_LIB)/$(*F)) SRCSTMF('$(CURRENT_PATH)/$<')" > $(*F)_1_crtrpgmod.log
ln -fs $(*F).rpgMod
all: $(TARGETS)
recurse
规则必须是makefile中的第一个目标。如果您想运行其他目标,例如make foobar
,这也无济于事;它只会帮助您正确运行all
。
或者,您可以获取GNU make并为您的系统构建它,并使用它。最后,这可能是一种更直接的方法。