2014-02-11 22 views
1

在IBM i系統上,使用PASE(AIX模擬器),我嘗試使用makefile編譯RPG源代碼。Makefile - 在源系統上推導目標(在iSeries系統上)

我有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) 

我嘗試使用AIX make command

任何建議申請GNU shell syntax

+0

我很困惑,你在運行IBM i還是AIX?目前的POWER硬件都支持這兩種操作系統。你的標題說iSeries(又名IBM i),但你的文章說AIX。您是否偶然使用IBM i中的內置PASE環境?這與AIX不完全相同。 – Charles

+0

是的,我正在運行PASE。對不準確的錯誤。我糾正了我的帖子。 –

回答

3

我不熟悉AIX的實現make,但假設鏈接的手冊頁是全部的,那麼它看起來像POSIX make(對於較舊的POSIX規範)的裸機實現。

因此,做你想做的(擴展文件的列表)的唯一方法是使用遞歸,讓您可以訪問外殼,就像這樣:

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併爲您的系統構建它並使用它。最後,這可能是一個更直接的方法。

+0

根據@MadScientist獲得GNU make的想法,IBM確實爲IBM i PPRQ(5799-PTL)提供了IBM開發人員工具,其中包括gmake v3.77(截至本文)。你可以在這裏找到PPRQ:http://www-304.ibm.com/partnerworld/wps/servlet/ContentHandler/pw_com_porting_tools_index#LOT – Charles