Sida 1 av 1
makefile - variabler till child processes
Postat: 5 september 2013, 21:03:05
av arte
Hej,
Ärver inte en childprocess alla enviroment variabler av sin parent???
Jag får det inte att fungera i följande make exempel.
Makefile:
a.c:
Kod: Markera allt
#include <stdio.h>
#include <stdlib.h>
int main(int argc,char *argv[])
{
char *descr = getenv(argv[1]);
if (descr)
printf("Value %s \n",descr);
else
printf("ERROR!!!!!!\n");
return 0;
}
Resultatet blir:
Sub shellet som make skapar för a.out skall väl innehålla alla variabler som dess parent har?
Re: makefile - variabler till child processes
Postat: 5 september 2013, 21:05:00
av sodjan
Jag fattar inte, försöker du exekvera okompilerad C kod !?
Om koden faktiskt hade körts, skulle det inte bli "ERROR!!!!!!"
och inte "ERROR" ?
Re: makefile - variabler till child processes
Postat: 5 september 2013, 21:06:18
av arte
Nu kom jag på det. Man måste exportera variablerna för att de skall bli synliga i subshellet.
Kod: Markera allt
VAR1 := envar
export VAR1
def:
./a.out VAR1
Någon som har någon kommentar? Finns det något bättre sätt?
Re: makefile - variabler till child processes
Postat: 5 september 2013, 21:07:40
av arte
sodjan skrev:Jag fattar inte, försöker du exekvera okompilerad C kod !?
Kanske lite otydligt.
a.out är bara ett program som läser en envrioment variable och skriver ut dess innehåll.
Någonstans skulle det stå
gcc a.c
Re: makefile - variabler till child processes
Postat: 5 september 2013, 21:10:06
av sodjan
OK, då är jag med...

Om det fungerar nu, varför behöver du en bättre metod?
Jag är igen expert på make, men är det inte detta som
"export" är tänkt till?
Re: makefile - variabler till child processes
Postat: 5 september 2013, 21:14:58
av arte
Jag är inte vidare duktig på make men har dock jobbet mycket med det, så har sett en hel del make filer.
Kan inte minnas att jag har sett export i en make fil.
Det jag försöker göra är:
makefile:
Kod: Markera allt
RTL_DIR:=/some/path
export RTL_DIR
def:
vlog -f thefiles.vc
thefiles.vc
Altså fil-listan som används av questasim innehåller referenser till en enviroment variablen RTL_DIR.
Men det fungerar nu, vet dock inte om det är det snyggaste sättet.
Re: makefile - variabler till child processes
Postat: 5 september 2013, 22:54:35
av danwi
Använd inte export i en make-fil - detta är till för skal-variabler! Det finns visserligen alltid undantag men jag har aldrig behövt använda export i en make-fil. Använd variabler som expanderas av make i stället. För att göra det ska du ersätta sista raden med:
Nu skriver du förvisso inte vilken make du kör, men skulle det vara GNU Make så finns
en matnyttig sida om variabler!
Re: makefile - variabler till child processes
Postat: 5 september 2013, 23:07:49
av danwi
Hmmm... När jag stod och borstade tänderna så insåg jag vad du faktiskt försöker göra

Export löser ju iofs det problemet tillräckligt bra men jag skulle nog kollat på om det finns något annat sätt att tota ihop kommandoradsargumenten till vlog innan jag tog till den lösningen.
Kommer thefiles.vc från QuestaSim eller är den egenskriven?
Re: makefile - variabler till child processes
Postat: 5 september 2013, 23:19:52
av sm5tfx
Jag har ingen civiliserad dator här just nu, så jag kan inte testa, men det går att sätta omgivnings-variabler för enstaka kommandon (under förutsättning att SHELL är satt till en normal shell i make-filen). Så nåt sånt här
bör kunna fungera.
Kod: Markera allt
VAR1 := jippiedetfunka
def:
VAR1=$(VAR1) ./a.out VAR1
Vilket för all del inte är så lättläst, men man kan ju välja bättre namn...
För den oinvigde:
VAR1 på första raden är make-variabeln som expanderas i $(VAR1) och det värdet sätts i shell-variabeln VAR1 som a.out läser eftersom a.out ges det variabel-namnet som parameter.
Och som sagt, reservation för att jag inte provkört ovanstående.