Article View: be.comp.programming
Article #5111Re: Wat doet volgende Makefile? (reguliere expressies)
From: Robrecht Jacques
Date: Mon, 02 Jun 2003 16:21
Date: Mon, 02 Jun 2003 16:21
46 lines
2757 bytes
2757 bytes
Gunter Schelfhout wrote:
> Nicolas Barbier wrote:
>>> ik
>>> vroeg me alleen af wat het eigenlijk juist doet:
>>> %.d: %.cxx
>>> set -e; $(CC) -MM $(CFLAGS) $< | sed 's/\($*\)\.o[ :]*/\1.o
>>> $@ : /g' > $@;
>>> [ -s $@ ] || rm -f $@
[...]
>> *: match nul of meerdere keren het vorige, ik denk dat je dit
>> verkeerd hebt overgetypt? Het lijkt me dat dit .* moet zijn (matcht
>> alles).
>
> Vermits het hier een shell-pipe betreft, is die $* de desbetreffende
> shell-variabele. (net zoals $@)
Heeft niet echt iets met de shell te maken, maar met de speciale variabelen
van 'gmake', net als $@ en $<. Zie het deel over 'Automatic Variables' in
de info-file van 'gmake'.
$* : The stem with which an implicit rule matches... The stem is
useful for constructing names of related files.
$< : The name of the first dependency.
$@ : The file name of the target of the rule.
De betekenis van deze variabelen in een shell (bv 'bash') is volledig
anders:
$* : Expands to the positional parameters, starting from one.
$@ : Expands to the positional parameters, starting from one. (maar dan
anders als gebruikt als "$@" in vgl met "$*").
$< : bestaat niet in een shell
[...]
>> De g duidt op meerdere keren vervangen als het meerdere keren
>> voorkomt (ik snap niet echt waarvoor dit nodig is).
>
> Omdat $* meerdere argumenten kan bevatten.
Niet waar. De 'stem' zal altijd maar ��n argument zijn. Bv in bovenstaande
rule (%.d: %.cxx) zal voor het bestand 'foo/bar.cxx' de stem 'foo/bar'
zijn.
Ik denk trouwens niet dat de '/g' nodig is.
Robrecht
Technical Details
Message-ID:
<3edb7a45$0$11120$ba620e4c@reader0.news.skynet.be>Path:
arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-04!sn-xit-01!sn-xit-09!supernews.com!diablo.theplanet.net!mephistopheles.news.clara.net!news.clara.net!skynet.be!skynet.be!louie!tlk!not-for-mailReferences:
<bb7qnc$38c$1@reader08.wxs.nl> <3ed77a1c$0$6531$afc38c87@sisyphus.news.be.easynet.net> <Z_2Ca.30325$1u5.2115@afrodite.telenet-ops.be>Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII X-Google-Thread: fcea4,e99e0c65c5ba9bfb X-Google-Attributes: gidfcea4,public X-Google-ArrivalTime: 2003-06-02 09:24:42 PST Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-04!sn-xit-01!sn-xit-09!supernews.com!diablo.theplanet.net!mephistopheles.news.clara.net!news.clara.net!skynet.be!skynet.be!louie!tlk!not-for-mail From: "Robrecht Jacques" <Robrecht.Jacques@advalvas.be> Newsgroups: be.comp.programming References: <bb7qnc$38c$1@reader08.wxs.nl> <3ed77a1c$0$6531$afc38c87@sisyphus.news.be.easynet.net> <Z_2Ca.30325$1u5.2115@afrodite.telenet-ops.be> Subject: Re: Wat doet volgende Makefile? (reguliere expressies) Date: Mon, 2 Jun 2003 18:21:59 +0200 X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 6.00.2800.1158 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1165 Lines: 48 Message-ID: <3edb7a45$0$11120$ba620e4c@reader0.news.skynet.be> Organization: -= Belgacom Usenet Service =- NNTP-Posting-Host: 80.200.74.139 X-Trace: 1054571077 reader0.news.skynet.be 11120 80.200.74.139:1024 X-Complaints-To: abuse@skynet.be