Portál AbcLinuxu, 31. října 2025 19:40
PROMENNA = HODNOTA_PROMENNE
neco:
    echo Promenna $$(PROMENNA) ma hodnotu $(PROMENNA)
aby mi vypsal
Promenna $(PROMENNA) ma hodnotu HODNOTA_PROMENNEOvš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_PROMENNEovšem "kdosi" se patrně $(PROMENNA) pokouší ještě dereferencovat a výsledek make je:
/bin/sh: PROMENNA: command not found Promenna ma hodnotu HODNOTA_PROMENNEtj. 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...
 4.12.2006 16:55
pdp7             | skóre: 33
             | blog: Mravenec_v_LCD_monitoru
             | Zákupy u České lípy
        4.12.2006 16:55
pdp7             | skóre: 33
             | blog: Mravenec_v_LCD_monitoru
             | Zákupy u České lípy
         4.12.2006 16:57
pdp7             | skóre: 33
             | blog: Mravenec_v_LCD_monitoru
             | Zákupy u České lípy
        4.12.2006 16:57
pdp7             | skóre: 33
             | blog: Mravenec_v_LCD_monitoru
             | Zákupy u České lípy
        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 founda ve výsledném .d souboru je bohužel jenom
/somesrc.: somesrc.cpp ...(tj. bez proměnných).
 4.12.2006 17:09
pdp7             | skóre: 33
             | blog: Mravenec_v_LCD_monitoru
             | Zákupy u České lípy
        4.12.2006 17:09
pdp7             | skóre: 33
             | blog: Mravenec_v_LCD_monitoru
             | Zákupy u České lípy
         4.12.2006 17:12
pdp7             | skóre: 33
             | blog: Mravenec_v_LCD_monitoru
             | Zákupy u České lípy
        4.12.2006 17:12
pdp7             | skóre: 33
             | blog: Mravenec_v_LCD_monitoru
             | Zákupy u České lípy
         
             4.12.2006 18:01
pdp7             | skóre: 33
             | blog: Mravenec_v_LCD_monitoru
             | Zákupy u České lípy
        4.12.2006 18:01
pdp7             | skóre: 33
             | blog: Mravenec_v_LCD_monitoru
             | Zákupy u České lípy
        $$ 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) $<
            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
 .
.
            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á.
            
        Tiskni
            
                Sdílej:
                 
                 
                 
                 
                 
                 
            
    
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.