Makefile pentru Java

gnu make Cum multi dintre voi programatori Java au avut probleme de compilare programe? biblioteci afară $ CLASSPATH, parametri de distanţa parcursă în kilometri pentru a trece la compilatorul Java. Chiar şi folosind medii de dezvoltare pentru Java, situaţia nu se îmbunătăţeşte de mult. Ne petrecem mult timp pentru a seta Parametrul şi de fiecare dată am lansa elaborarea lipseşte întotdeauna ceva!

Puteti evita toate aceste probleme de organizare, pur şi simplu sursa Java şi folosind un Makefile scris în acest scop.

Ce este un Makefile

Un Makefile este un fişier care descrie paşii efftuare pentru a ajunge la fişiere care ne copac şi toate dependenţele sale. Este folosit în platforme bazate pe Unix si poate fi folosit pentru a compila fiecare tip de program. Face utilitate interpretează Makefile şi a compila codul sursă pentru programe executabile şi biblioteci.

Avantajele folosirii a face

Multi dintre voi sunt sceptici de a folosi un Makefile pentru fiecare proiect Java pentru simplul motiv că are nevoie de Makefile pentru a specifica dependenţelor dintre imagini, care cu siguranţă variază de la proiect la proiect. Deci, noi ar trebui să scrie un Makefile pentru fiecare alte proiectului nostru. Această limită poate fi depăşită prin scris, un generator de Makefile este capabil să calculeze toate dependenţele pentru ca proiectul să fie completate pentru a utiliza acelaşi script pentru toate proiectele, fără nimic în moficare Makefile.

Desigur, nu este neglijabilă avantaj abilitatea de a face suficienta pentru a umple. Vă rugăm să evitaţi a face ceea ce este deja finalizată şi nu a fost schimbat cu o economie substanţială de timp.

Cu doar un Makefile puteţi construi toate sursele de proiect.

Cum să utilizaţi

I-am scris Makefile pentru a construi proiecte Java pot fi utilizate fără modificări pentru proiectele care au o structura anumit director. Sursa Java ar trebui să aibă un director pentru Java,. Unul pentru fisierele din clasa,. Şi un borcan pentru biblioteci.
De exemplu:

  | - Src
 | `- Main
 | | - Java
 | | `- Com
 | | `- Exemplu
 | | | - ExampleA.java
 | | | - ExampleB.java
 | | `- ExampleC.java
 | `- Resurse
 | `- Res.java
 | - Clase
 | - Libs
 | | - General
 | | | - Baza de date
 | | | | - DB1.jar
 | | | `- DB2.jar
 | `- Logging
 | `- Log.jar
 | - Jars

să-l utilizaţi, apoi doar scrie codul de mai jos în Makefile în directorul rădăcină al proiectului, verifică dacă numele directorului este cea specificată în fişierul (pentru clasele. pentru clasa; src. libs Pentru borcan pentru Java) şi lansarea comandă make
asta este. Dacă vrem un recipient care conţine întregul proiect doar să rulaţi make && make jar

Makefile

  #
 # Makefiles
 # Autor: Danilo Abbasciano
 #

 # Setaţi aici directoare pentru clasele şi surse
 CLASS_DIR = clase
 Src = SOURCE_DIR
 JARS_DIR borcane =

 find $ ( SOURCE_DIR ) - name "*.java" - printf % h\\n | sort | uniq | sed 's/$(SOURCE_DIR) \/ \? //' ) SUBDIRS: = $ (coajă găsi $ (SOURCE_DIR), - numele de "*. java" -% printf h \ \ N | Sortare | uniq | sed 's / $ (SOURCE_DIR) \ / \? / /')

 local / java / bin JAVA_HOME = / usr / local / java / bin

 Câmp # compilator
 JDEBUGFLAGS = #-g-dezaprobare
 # JDEBUGFLAGS =- O-depinde-nowarn
 ) / javac CMC = $ (JAVA_HOME) / javac

 clean classes compile jar :. Ciudat compila borcan curat clase

 la:
	 SUBDIRS ) ; do \ Pentru p @ @ în $ (SUBDIRS); nu \
		 p ; \ echo 'compila' $ $ p; \
		 $$ p ; \ Export SubD = $ $ p; \
		 print - directory compile ; \ face - nu de imprimare - - compila director, \
	 făcut

 Curăţenie:
	 f * ~ *. class *. bak $ ( foreach dir ,$ ( SUBDIRS ) ,$ ( CLASS_DIR ) /$ ( dir ) /*. class ) - RM - f * ~ *. bak *. clasa $ (dir foreach, $ (SUBDIRS) $ (CLASS_DIR) / $ (dir) / clasa *.),


 ) /$ ( SUBDIR ) LOCAL_CLASS_DIR = $ (CLASS_DIR) / $ (SubD)
 ) /$ ( SUBDIR ) LOCAL_SOURCE_DIR = $ (SOURCE_DIR) / $ (SubD)

 borcan:
	 ) ; jar - cf ../$ ( JARS_DIR ) / project . jar * cd $ (CLASS_DIR) borcan - .. CF / $ (JARS_DIR) / proiect. borcan *

 compila: clase

 # Creaţi clasa directorul ţintă, dacă nu este prezent.
 ) : $ (LOCAL_CLASS_DIR):
	 LOCAL_CLASS_DIR ) mkdir - p $ (LOCAL_CLASS_DIR)


 Noua regula # pentru Java
 . Sufixe:
 java . class :. Sufixe. Java. Clasa


 # Care spune comanda make magică pentru a găsi fişierele de clasă în alta dir
 class $ ( LOCAL_CLASS_DIR ) % Vpath clasa. $ (LOCAL_CLASS_DIR)
 java $ ( LOCAL_SOURCE_DIR ) Vpath%. Java $ (LOCAL_SOURCE_DIR)

 Classpath #, toate inch / borcane şi. / Libs
 ) :$ ( SOURCE_DIR ) :$ ( subst . jar ,. jar :,$ ( wildcard libs /*. jar libs /*/*. jar libs /*/*/*. jar jars /*. jar ) ) LIBCLASSPATH: = $ (CLASS_DIR): $ (SOURCE_DIR): $ (subst. Jar:. Jar $ (wildcard-libs / *. jar libs libs /*/*/*. /*/*. borcan borcane borcan / * ). JAR)

 # Compilator comandă
 class : . Java. Class:
	 ) $ ( JCC ) - nowarn - d $ ( CLASS_DIR ) $ ( JDEBUGFLAGS ) $< CLASSPATH = $ (LIBCLASSPATH) $ (CMC) - nowarn - d $ (CLASS_DIR) $ (JDEBUGFLAGS) $ <

 # Aflaţi ţintă fişiere
 $ ( LOCAL_SOURCE_DIR ) /*. java ) PATHFILES = $ (metacaractere $ (LOCAL_SOURCE_DIR) / *. java)
 $ ( LOCAL_SOURCE_DIR ) /,,$ ( PATHFILES ) ) FILES = $ (subst $ (LOCAL_SOURCE_DIR) /,, $ (PATHFILES))
 java =. class ) clase: $ (fisiere:. java =. clasă) 

Bun compilare.

Unul Răspuns la "Makefile pentru Java"

  1. thegamer - 28.08.2009

    Eu prefer mult mai furnică!
    Ar trebui sa incerci ...

Plecare un Reply