Creazione di un makefile Java


EDIT: Essenzialmente, sto cercando di fare la stessa cosa che digitare "javac sim.java "e poi" java sim (comandi)". C'è un modo per sostituirlo usando un makefile?

Quindi ho guardato molti esempi online e ho provato a modificarli in base a ciò di cui ho bisogno, ma nulla ha funzionato. Ho bisogno di un makefile in modo che il mio insegnante possa creare il mio progetto semplicemente digitando "make" nel terminale (questo è un requisito del progetto per qualche motivo). Il mio obiettivo finale è essere in grado di digitare "sim" seguito dal comandi richiesti come definito dal mio codice. Il codice viene eseguito in eclipse, ma non riesco a farlo funzionare usando questi comandi nel terminale. Renderà il file, ma dice "sim: comando non trovato" quando provo a digitare " sim....(argomenti) " nel terminale. Sono sicuro che questa è una domanda stupida, ma non abbiamo imparato a conoscere questo a scuola e non ho esperienza con Makefile.

Di seguito è riportato il mio makefile.

JFLAGS = -g
JC = javac
OPT = -O3
#OPT = -g
WARN = -Wall

sim: sim.class

sim.class: sim.java
    $(JC) $(JFLAGS) sim.java

clean:
    $(RM) sim.class

clobber:
    $(RM) sim.class
Author: Dude, 2015-03-21

3 answers

Usare make with java può essere un esercizio per guidare le viti con un martello non appena si hanno più di una classe.

Il codice java funzionante utilizzerà i pacchetti. Quindi avrai un albero di directory complesso che rispecchia la struttura del tuo pacchetto, con il tuo .file sorgente java in esso. Scrivere regole che 'vedono' tutti quei file è un dolore.

Dovresti richiamare javac su tutti i tuoi file di origine allo stesso tempo per ottenere risultati corretti. Quindi, il solito modello di make di ' esegui un comando per trasformarne uno file sorgente in un file compilato ' non funziona così bene.

Tuttavia, sembra che il tuo problema principale al momento sia che ti aspetti che java produca un eseguibile; un file con un nome come 'sim'. No, non succederà in alcun modo semplice. Il compilatore java produce .file di classe; un intero albero di loro per i file di origine. È possibile eseguire direttamente da loro, oppure è possibile impacchettarli in un file JAR.

Per arrivare fino a qualcosa che sembra essere una semplice riga di comando eseguibile, è necessario utilizzare uno strumento più complesso che avvolge tutto questo con uno script sul fronte.

Per ora, devi solo fare:

java -cp . NAME_OF_THE_CLASS_IN_sim.java

Per eseguire dopo il completamento del makefile.

 5
Author: bmargulies, 2015-03-21 16:40:50

Per un progetto semplice senza molti file o dipendenze, uso semplicemente script.

Per costruire:

javac -cp .;* *.java

Per eseguire:

java -cp .;* SomeMainClass

Sostituisci . con qualsiasi percorso(i) necessario per la tua origine. * utilizzerà qualsiasi jar sul percorso predefinito o utilizzerà un percorso diverso come lib/*.

 3
Author: Jeff Miller, 2015-03-21 16:32:49

Make esegue una ricetta eseguendo le sue dipendenze, quindi la ricetta stessa. Pertanto, se si aggiunge un comando che esegue il codice compilato alla ricetta in alto, digitando 'make' verrà eseguito anche il codice dopo che è stato compilato. Non riesco a credere a quante persone non lo sappiano!

Qualcosa come:

sim: sim.class
    java sim

Farà ciò che il tuo tutor richiede.

 0
Author: Jamie McLaughlin, 2018-02-01 20:58:52