Brug af miljøvariabler til at danne stier i Make and Windows

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har en make-fil, og jeg forsøger at bruge den til at kopiere filer til en mappe. Stien til mappen er gemt i en miljøvariabel. Problemet er, når jeg kører, gør C: \ Data fra miljøvariablen fortolket som C: Data. Hvordan stopper jeg dette, der fortolkes som en flugttegn?


copyData : buildData
cp Release/*.tbl $(DATA)/index

results in:

cp Release/*.tbl C:Data/index
cp: `C:Data/index': specified destination directory does not exist
Try `cp --help' for more information.

Bedste reference


Faktisk er brugen af ​​skråstreger den bedste og korrekte løsning. Windows-hjælpeprogrammer understøtter altid fremad skråstreger, så det virker, og forsøger at huske at altid citere stienavne for at undgå problemer med tilbageslag er et stort problem.


I dette tilfælde er det første at bemærke, at problemet ikke er et problem med make. make passerer det rigtige indhold til skallen; det er shell , der analyserer backslash som et escape-tegn.


Som jeg sagde ovenfor, er det rigtige svar at bruge skråstreger, men hvis du vil tillade folk at bruge backslashes, skal du gennemgå din makefile og citere alle argumenter, hvor der kan forekomme backslash. For eksempel:


copyData : buildData
        cp Release/*.tbl '$(DATA)'/index


vil rette dit øjeblikkelige problem.


Hvis du bare har et par af disse variabler, kan du også gøre noget som:


QDATA = '$(DATA)'


så husk at bruge $(QDATA), hvor du ønskede den citerede værdi:


copyData : buildData
        cp Release/*.tbl $(QDATA)/index


PS. Brug fremad skråstreger !! :-)