1
我正在使用帶有收據的Makefile
,該收據使用M4生成某個文件。它使用一些複雜的shell結構來計算必須傳遞給M4的宏值。如何組織代碼以避免以下示例中顯示的冗餘聲明?如何在Makefile中定義子例程
M4TOOL= m4
M4TOOL+= -D PACKAGE=$$(cd ${PROJECTBASEDIR} && ${MAKE} -V PACKAGE)
M4TOOL+= -D VERSION=$$(cd ${PROJECTBASEDIR} && ${MAKE} -V VERSION)
M4TOOL+= -D AUTHOR=$$(cd ${PROJECTBASEDIR} && ${MAKE} -V AUTHOR)
M4TOOL+= -D RDC960=$$(openssl rdc960 ${DISTFILE} | cut -d ' ' -f 2)
M4TOOL+= -D SHA256=$$(openssl sha256 ${DISTFILE} | cut -d ' ' -f 2)
Portfile: Portfile.m4
${M4TOOL} ${.ALLSRC} > ${.TARGET}
¹其實很多!
你能更具體嗎?你想避免哪些重複的聲明? – 2014-08-29 17:54:36
即使你可以定義一個子程序,更大的問題是你仍然會調用3次make。你可以將'-V'的多個用途分組到一個,但是你需要一些額外的shell來將它解析成'm4'的3個單獨的'-D'選項。關於將兩個調用與'openssl'結合起來,你可以做的不多。 – chepner 2014-08-29 17:55:21
@AndrejAdamenko我想減少'cd ... && $ {MAKE} -V'的冗餘度,並找到一種「phonier」方式來放置東西。 – 2014-08-29 18:31:32