Makefile pour Java

gnu make Combien d'entre vous programmeurs Java ont eu des problèmes pour compiler des programmes? bibliothèques out $ CLASSPATH, les paramètres à passer au kilomètre compilateur Java. Même en utilisant des environnements de développement pour Java, la situation ne s'améliore pas beaucoup. Nous passons beaucoup de temps pour mettre en paramteri et chaque fois que vous exécutez la compilation manque toujours quelque chose!

Vous pouvez éviter tous ces problèmes simplement en organisant la source Java et utilisant un Makefile écrite à cet effet.

Qu'est-ce qu'un Makefile

Un makefile est un fichier qui décrit les étapes pour efftuare pour accéder à des fichiers que nous obtenons l'arbre et toutes ses dépendances. Il est largement utilisé dans Unix plates-formes et peuvent être utilisés pour compiler chaque type de programme. L'utilitaire make interprète le Makefile et compiler le code source des programmes exécutables et les bibliothèques.

Avantages de l'utilisation de make

Beaucoup d'entre vous sont sceptiques sur l'aide d'un makefile pour chaque projet Java pour la simple raison que le makefile doit spécifier toutes les dépendances entre les fichiers, qui varie certainement d'un projet à. Nous devons donc écrire un autre fichier makefile pour chacun de nos projets. Cette limite peut être surmonté par l'écriture d'un makefile générique qui peut calculer toutes les dépendances pour que le projet soit complété afin d'utiliser le même script pour tous les projets sans que rien moficare dans le makefile.

Certainement pas négligeable avantage est la possibilité de faire seulement ce que vous devez remplir. S'il vous plaît éviter de faire ce qui est déjà achevée et n'a pas été modifiée avec une économie substantielle de temps.

Avec un makefile unique, vous pouvez créer toutes les sources du projet.

Comment utiliser

Le makefile que j'ai écrit pour construire des projets Java peut être utilisé sans modification pour des projets qui ont une structure de répertoire donné. La source Java devrait avoir un répertoire pour i. Java, une pour les fichiers. Classe, et un pot pour les bibliothèques.
Exemple:

  | - Src
 | `- Main
 | | - Java
 | | `- Com
 | | `- Exemple
 | | | - ExampleA.java
 | | | - ExampleB.java
 | | `- ExampleC.java
 | `- Ressources
 | `- Res.java
 | - Classes
 | - Libs
 | | - General
 | | | - Base de données
 | | | | - DB1.jar
 | | | `- DB2.jar
 | `- Exploitation forestière
 | `- Log.jar
 | - Jars

Pour qu'elle utilisation, donc il suffit d'écrire le code ci-dessous dans le fichier Makefile dans le répertoire racine du projet, vérifiez que le nom du répertoire est celui spécifié dans le fichier (pour les classes. Classe; pour la SRC. Libs pour Java et JAR) et lancez le commande make
C'est tout. Si nous voulons aussi une jarre contenant l'ensemble du projet il suffit d'exécuter make && make jar

Makefile

  #
 # Makefile
 # Auteur: Danilo Abbasciano
 #

 # Set ici les répertoires pour les classes et les sources
 CLASS_DIR = classes
 SOURCE_DIR src =
 JARS_DIR bocaux =

 find $ ( SOURCE_DIR ) - name "*.java" - printf % h\\n | sort | uniq | sed 's/$(SOURCE_DIR) \/ \? //' ) SUBDIRS: = $ (shell find $ (SOURCE_DIR) - name "*. java" - h% printf \ n | sort | uniq | sed 's / $ (SOURCE_DIR) \ / \? / /')

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

 Field # compilateur
 # JDEBUGFLAGS =- g-dévalorisation
 # JDEBUGFLAGS =- O-depend-nowarn
 ) / javac CCM = $ (JAVA_HOME) / javac

 clean classes compile jar . PHONY: nettoyer la compilation des classes jar

 tous:
	 SUBDIRS ) ; do \ @ @ Pour p in $ (SUBDIRS); do \
		 p ; \ echo 'compilation' $ $ p; \
		 $$ p ; \ Export SUBD = $ $ p; \
		 print - directory compile ; \ faire - non - Imprimer - Répertoire compiler, \
	 fait

 Propreté:
	 f * ~ *. class *. bak $ ( foreach dir ,$ ( SUBDIRS ) ,$ ( CLASS_DIR ) /$ ( dir ) /*. class ) - Rm - f * ~ *. bak *. class $ (foreach dir, $ (SUBDIRS), $ (CLASS_DIR) / $ (dir) / *. class)


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

 JAR:
	 ) ; jar - cf ../$ ( JARS_DIR ) / project . jar * cd $ (CLASS_DIR); jar - cf .. / $ (JARS_DIR) / projet. jar *

 compile: les classes

 # Création de classe cible dir s'il n'est pas présent.
 ) : $ (LOCAL_CLASS_DIR):
	 LOCAL_CLASS_DIR ) mkdir - p $ (LOCAL_CLASS_DIR)


 Nouvelle règle # for Java
 . SUFFIXES:
 java . class . SUFFIXES:. Java. Classe


 # Commande magique qui indique à faire pour trouver les fichiers de classe dans un autre dir
 class $ ( LOCAL_CLASS_DIR ) vpath%. classe $ (LOCAL_CLASS_DIR)
 java $ ( LOCAL_SOURCE_DIR ) vpath%. java $ (LOCAL_SOURCE_DIR)

 # Classpath, tous po / Jarres et. / 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 / libs *. jar jar /*/*. libs /*/*/*. bocaux jar / * . jar))

 # Commande Compil
 class : . Java. Classe:
	 ) $ ( JCC ) - nowarn - d $ ( CLASS_DIR ) $ ( JDEBUGFLAGS ) $< CLASSPATH = $ (LIBCLASSPATH) $ (JCC) - nowarn - d $ (CLASS_DIR) $ (JDEBUGFLAGS) $ <

 # Retrouvez tous les fichiers cibles
 $ ( LOCAL_SOURCE_DIR ) /*. java ) PATHFILES = $ (wildcard $ (LOCAL_SOURCE_DIR) / *. java)
 $ ( LOCAL_SOURCE_DIR ) /,,$ ( PATHFILES ) ) FILES = $ (subst $ (LOCAL_SOURCE_DIR) /,, $ (PATHFILES))
 java =. class ) classes: $ (FILES:. =. java classe) 

Bonne compilation.

One Response to "Makefile for Java"

  1. thegamer - 28 août 2009

    Je préfère de beaucoup fourmi!
    Vous devez l'essayer ...

Laissez une réponse