Come posso simulare gli obiettivi di Make all'interno di un file batch di Windows?


1

Nel lavorare verso la risoluzione https://tex.stackexchange.com/a/160685/17423 , Sto cercando di creare una versione di file batch di Questo makefile.

Esiste un modo chiaro / convenzionale per simulare la funzionalità "target" di Make? Non ho bisogno della risoluzione della dipendenza di fantasia make fornisce - solo una sorta di sintassi (si spera pulita).


c'è una ragione per cui non puoi usare Make?
jdigital

@jdigital Non posso presumere che verrà installato; Sto distribuendo un paio di pacchetti LaTeX ai miei compagni di classe --- alcuni dei quali sono major di matematica per lo più spaventati dal computer. Sarà tutto ciò che posso fare per farli aprire il terminale; l'installazione di Cygwin / MinGW / MSYS è sfortunatamente fuori questione.
Sean Allred

il makefile sembra banale; in effetti, è quasi come un file batch. perché non provi e poi se hai un problema, pubblica una domanda più specifica.
jdigital

@jdigital il punto è che io poteva fallo con una sequenza if-then davvero sgradevole, confrontando il primo argomento della riga di comando con una certa costante. La mia domanda è in particolare quella di chiedere una sintassi più pulita e idiomatica.
Sean Allred

Potrebbe essere difficile. Nota che se una linea in un'azione fallisce, Make non eseguirà le linee rimanenti.
jdigital

Risposte:


4

Non sei sicuro degli equivalenti di Windows dei comandi che stai utilizzando, ma questo è un semplice esempio di esecuzione di determinate funzioni basate sui parametri della riga di comando. Puoi sostituire il echo comandi con tutti i comandi che desideri. Se togli il goto :end sulla linea 5, il default la funzione verrà eseguita quando non vengono forniti parametri, analogamente ai makefile.

@ECHO off    
if /I %1 == default goto :default
if /I %1 == install goto :install
if /I %1 == tikzpgf goto :tikzpgf
if /I %1 == clean goto :clean

goto :eof ::can be ommited to run the `default` function similarly to makefiles

:default
echo DEFAULT
goto :eof

:install
echo INSTALL
goto :eof

:tikzpgf
echo TIKZPGF
goto :eof

:clean
echo CLEAN
goto :eof

1
Lo script batch dovrebbe ignorare il caso ( if /i ), per evitare malfunzionamenti quando qualcuno usa "INSTALLA" o "clEAN", ecc. Inoltre, si può fare affidamento sul built-in EOF etichetta piuttosto che definirne una nuova.
and31415

Script aggiornato con tali modifiche
Nate Mara
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.