From: Eli Zaretskii Newsgroups: comp.os.msdos.djgpp Subject: Re: using `notdir' inside a loop in a makefile Date: Mon, 03 Apr 2000 20:53:53 +0200 Organization: NetVision Israel Lines: 19 Message-ID: <38E8E8C1.756EF1D1@is.elta.co.il> References: <200004031534 DOT KAA02746 AT darwin DOT sfbr DOT org> NNTP-Posting-Host: ras1-p69.rvt.netvision.net.il Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Trace: news.netvision.net.il 954787942 20126 62.0.172.71 (3 Apr 2000 18:52:22 GMT) X-Complaints-To: abuse AT netvision DOT net DOT il NNTP-Posting-Date: 3 Apr 2000 18:52:22 GMT X-Mailer: Mozilla 4.7 [en] (Win98; I) X-Accept-Language: en,ru,hebrew To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Reply-To: djgpp AT delorie DOT com Jeff Williams wrote: > > Would someone please explain why the following makefile fragment > doesn't behave as expected? Something about using `notdir' inside > the `for' loop isn't working as desired. > > subdirs = ./dir1/foo.1 ./dir2/bar.2 > test: > for k in $(subdirs) ; do \ > echo $$k ; \ > echo $(notdir $$k) ; \ > done There's no way this is going to work, because $(notdir) is a Make function, while $$k is only expanded when the shell is run by Make. So when Make comes to expand $(notdir), it sees $$k as its argument, and that expands to itself (since it has no leading directories). You want to use `basename $$k` instead.