2

I have a Makefile which has a line:

sed -i -e 's/\(^COPTS = \)/\1$(CFLAGS) /' $(DIR)/Makefile

After substituting values it becomes:

sed -i -e 's/\(^COPTS = \)/\1"-I/home/jagadeesh/Smoothwall/bcutm/distrib/tools//powerpc-linux/include -I/home/jagadeesh/Smoothwall/bcutm/distrib/usr/include/ncurses -I/home/jagadeesh/Smoothwall/bcutm/distrib/usr/include" /' net-tools-1.60/Makefile

When make is run it gives following error:

sed: -e expression #1, char 23: unknown option to `s'

The net-tool-1.60/Makefile on which this sed command is going to run contains following relevant lines:

COPTS = -D_GNU_SOURCE -O2 -Wall -g # -I/usr/inet6/include
CFLAGS  = $(COPTS) -I. -idirafter ./include/ -I$(NET_LIB_PATH)
MDEFINES = COPTS='$(COPTS)' LOPTS='$(LOPTS)' TOPDIR='$(TOPDIR)'

What does that command do, to which line of the Makefile, why is the error comming, I didn't modify anything except CFLAGS and LDFLAGS which are my custom.

Haswell
  • 1,573
  • 1
  • 18
  • 45

1 Answers1

2

Since the replacement part contains the delimiter /, the command fails. I suggest to use a different delimiter, let's say ~:

sed -i -e 's~\(^COPTS = \)~\1$(CFLAGS) ~' $(DIR)/Makefile
hek2mgl
  • 152,036
  • 28
  • 249
  • 266