Makefile - 从源代码中删除目标(在iSeries系统上)

时间:2014-02-11 16:18:43

标签: makefile ibm-midrange

在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

有什么建议吗?

1 个答案:

答案 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并为您的系统构建它,并使用它。最后,这可能是一种更直接的方法。