Portál AbcLinuxu, 11. května 2024 01:01


Dotaz: makefile - Jak předat na příkazovou řádku název proměnné?

4.12.2006 16:50 Styryx | skóre: 3
makefile - Jak předat na příkazovou řádku název proměnné?
Přečteno: 185×
Odpovědět | Admin
Věděl by někdo z přítomných Linuxových programátorů, jak předám programu z makefile název proměnné?

Např. pokud bych měl
PROMENNA = HODNOTA_PROMENNE

neco:
    echo Promenna $$(PROMENNA) ma hodnotu $(PROMENNA)
aby mi vypsal
Promenna $(PROMENNA) ma hodnotu HODNOTA_PROMENNE
Ovšem takto mi to funguje pouze na Windows, nikoliv na Linuxu. Na linuxu se, jak se zdá, pokouší z mě neznámého důvodu zavolat příkazy (?) uvedené mezi $() - tj. make zřejmě předá správně
Promenna $(PROMENNA) ma hodnotu HODNOTA_PROMENNE
ovšem "kdosi" se patrně $(PROMENNA) pokouší ještě dereferencovat a výsledek make je:
/bin/sh: PROMENNA: command not found
Promenna  ma hodnotu HODNOTA_PROMENNE
tj. chybový výpis a hlavně tam pak chybi $(PROMENNA). Ovšem pokud tam mám jenom $$ samotné, bez (PROMENNA), vypise to $ správně jak bych očekával.

Co s tím? Potřebuji $(PROMENNA) předat dál a nikoliv spouštět jakýsi program...
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

pdp7 avatar 4.12.2006 16:55 pdp7 | skóre: 33 | blog: Mravenec_v_LCD_monitoru | Zákupy u České lípy
Rozbalit Rozbalit vše Re: makefile - Jak předat na příkazovou řádku název proměnné?
Odpovědět | | Sbalit | Link | Blokovat | Admin
A proc davas do zavorek?
"První" komunita sdílející software
pdp7 avatar 4.12.2006 16:57 pdp7 | skóre: 33 | blog: Mravenec_v_LCD_monitoru | Zákupy u České lípy
Rozbalit Rozbalit vše Re: makefile - Jak předat na příkazovou řádku název proměnné?
PROMENA=hodnota

echo $PROMENA
4.12.2006 17:04 Styryx | skóre: 3
Rozbalit Rozbalit vše Re: makefile - Jak předat na příkazovou řádku název proměnné?
To byl zjednodušenej přiklad, konkrétně to potřebuju pro vytvoření dependencies příkazem
somesrc.d: somesrc.cpp
    gcc -MM -MP -MF$@ -MT$$(DIR)/$*.$$(OBJ_SFX) $<
aby soubor somesrc.d obsahoval
$(DIR)/somesrc.$(OBJ_SFX): somesrc.cpp ...
tj. aby proměnné v .dep souboru nebyly dereferencované (kvůli různým nastavením pro různé systémy).

Jenže takto to nefunguje, vypíše mi to
/bin/sh: DIR: command not found
/bin/sh: OBJ_SFX: command not found
a ve výsledném .d souboru je bohužel jenom
/somesrc.: somesrc.cpp ...
(tj. bez proměnných).
pdp7 avatar 4.12.2006 17:09 pdp7 | skóre: 33 | blog: Mravenec_v_LCD_monitoru | Zákupy u České lípy
Rozbalit Rozbalit vše Re: makefile - Jak předat na příkazovou řádku název proměnné?
Jo tak. Misto tech kulatych zavorek tam dej slozeny.
pdp7 avatar 4.12.2006 17:12 pdp7 | skóre: 33 | blog: Mravenec_v_LCD_monitoru | Zákupy u České lípy
Rozbalit Rozbalit vše Re: makefile - Jak předat na příkazovou řádku název proměnné?
Jinak o skriptovani vim skoro prd, takze sory jestli ti radim blbe. :-D
4.12.2006 17:22 Styryx | skóre: 3
Rozbalit Rozbalit vše Re: makefile - Jak předat na příkazovou řádku název proměnné?
To taky nefachčí. Když tam dam složený nebo bez závorek, tak to sice nevypíše chybu, ale taky se to nahradí "prázdnem".

Chjo, se mi to nechce dělat přes sed ale zřejmě to jinak nepude.
pdp7 avatar 4.12.2006 18:01 pdp7 | skóre: 33 | blog: Mravenec_v_LCD_monitoru | Zákupy u České lípy
Rozbalit Rozbalit vše Re: makefile - Jak předat na příkazovou řádku název proměnné?
Promin vubec me neposlouchej! Nerid se mnou!! Plodim desny kraviny.
5.12.2006 09:59 Styryx | skóre: 3
Rozbalit Rozbalit vše Re: makefile - Jak předat na příkazovou řádku název proměnné?
To je ok :-) dík alespoň za snahu.
4.12.2006 19:45 Sinuhet | skóre: 31
Rozbalit Rozbalit vše Re: makefile - Jak předat na příkazovou řádku název proměnné?
No make $$ premeni na $, takze jeste byste to mel escapnout pro shell (slash, uvozovky). Mozna takhle
somesrc.d: somesrc.cpp
    gcc -MM -MP -MF$@ -MT\$$(DIR)/$*.\$$(OBJ_SFX) $<
5.12.2006 10:07 Styryx | skóre: 3
Rozbalit Rozbalit vše Re: makefile - Jak předat na příkazovou řádku název proměnné?
Jo, díky, navedl jste mě na správnou cestu. Baskslash ani uvozovky nefungujou, ale s apostrofy to jde
gcc -MM -MP -MF$@ '-MT$$(DIR)/$*.\$$(OBJ_SFX)' $<
našel jsem před chvílí nakonec někde na stránkách o /bin/sh že když je to v apostrofech tak se proměnný nevyhodnocujou :-).
5.12.2006 10:58 podlesh | skóre: 38 | Freiburg im Breisgau
Rozbalit Rozbalit vše Re: makefile - Jak předat na příkazovou řádku název proměnné?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pro úplnost bych doplnil základní vysvětlení příčiny problému: došlo k pomíchání resolvování proměnných make a shellu. Obě syntaxe jsou velmi podobné (začínají dolarem), ale ne stejné: zatímco v makefile se používají kulaté závorky, v shellu složené. Kulaté závorky v shellu spustí program, je to ekvivalentní použití zpětných apostrofů (backtick).

Například tyto dva zápisy jsou (funkčně) ekvivalentní:
echo `basename $PWD`
echo $(basename $PWD)
V původním makefile bylo správně zabráněno resolvování proměnné make (zdvojením dolaru), ale už nebylo zabráněno zpracování této konstrukce v shellu. Na windows to samozřejmě fungovalo, protože cmd.exe nic takového nemá.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.