linux,要在某个makefile里调用sed,把另外一个makefile里的如下两行:
FREETYPE_CFLAGS = -I/usr/include/freetype2 -I/usr/include/libpng16
FREETYPE_LIBS = -lfreetype
替换为
FREETYPE_CFLAGS = -I$(OUTPUT)/freetype/include -I$(OUTPUT)/png/include
FREETYPE_LIBS = -L$(OUTPUT)/freetype/lib -lfreetype
简单说,就是某个软件用autoconf生成的makefile,configure.ac里面用PKG_CHECK_MODULES()找到了系统目录下的freetype库,我要把它替换成我自己目录下的freetype库。
麻烦的地方在于,
make、bash都对某些特殊符号存在转义,比如make将$$视为$,导致sed检测到命令格式错误:
sed --debug -i 's#^FREETYPE_CFLAGS .*$#FREETYPE_CFLAGS = -I$$(OUTPUT)/freetype/include -I$$(OUTPUT)/png/include#' ./Makefile && \
sed --debug -i 's#^FREETYPE_LIBS .*$#FREETYPE_LIBS = -L$$(OUTPUT)/freetype/lib -lfreetype#' ./Makefile && \
sed:-e 表达式 #1,字符 96:未终止的“s”命令
加上sed --debug也无济于事。
编辑:
搞定了,有个$没转义为$$。正确的:
sed --debug -i 's#^FREETYPE_CFLAGS .*$$#FREETYPE_CFLAGS = -I$$(OUTPUT)/freetype/include -I$$(OUTPUT)/png/include#' ./Makefile
sed --debug -i 's#^FREETYPE_LIBS .*$$#FREETYPE_LIBS = -L$$(OUTPUT)/freetype/lib -lfreetype#' ./Makefile
--
修改:z16166 FROM 114.241.225.*
FROM 114.241.225.*