2010-05-09 9 views
0

J'ai un problème avec un makefile. J'ai trois classes. Ils font des choses assez simples. On fait une addition sur une soustraction, et la dernière instancie les deux et imprime simplement l'addition et la soustraction résultantes.Problème de compilation Makefile avec javac

Maintenant, quand je crée mon makefile, je compile mon Plus.java et mon Minus.java mais je ne sais pas comment compiler la classe principale car cela dépend des deux précédents. Je veux le compiler et le lancer depuis le makefile si c'est possible.

-je obtenir les résultats ci-dessus lorsque je tente de faire courir:

javac -g Plus.class Minus.class 
javac: invalid flag: Plus.class 
Usage: javac <options> <source files> 
use -help for a list of possible options 
make: *** [Operation.class] Error 2 

Je ne sais pas comment procéder; s'il vous plaît pardonnez-moi si ma question est simple mais je suis nouveau travaillant avec ces choses. J'ai cherché de nombreux sites mais sans réponse.

Voici mon Makefile:

JCC = javac 

JCR = java 

JFLAGS = -g 

default: Operation.class 

Plus.class: Plus.java 
    $(JCC) $(JFLAGS) Plus.java 

Minus.class: Minus.java 
    $(JCC) $(JFLAGS) Minus.java 

Operation.class: Operation.class 
    $(JCC) $(JFLAGS) Operation.class 

run: Operation.class 
    $(JCR) Operation.class 

clean: 
    $(RM) *.class 
+2

ne pas utiliser makefile pour java. Utilisez fourmi ou maven. – Bozho

+1

Je voulais utiliser makefiles car je dois aussi travailler avec des fichiers java et C++. – mistique

+0

Je sais makefiles, mais pas java. Je ne vois pas comment ce makefile pourrait fonctionner, ni comment il pourrait donner cette erreur. Exécutez-vous simplement 'make', ou lui donnez-vous une cible, comme' make Pluss.class'? – Beta

Répondre

0

Je l'ai résolu. C'était un problème avec les paquets.Je modifié mes fichiers dans NetBeans et resté:

opérations paquet

à chacun d'entre eux

alors je suis Opération compiler mais maintenant il n'a pas couru

problème idiot ... .

JCC = javac

JCR = java

JFLAGS = -g

par défaut: Operation.class Plus.class Minus.class

Plus.class: Plus.java $ (JCC) $ (JFLAGS) Plus.java

Minus. classe: Minus.java $ (JCC) $ (JFLAGS) Minus.java

Operation.class: Operation.java Plus.java Minus.java $ (JCC) $ (JFLAGS) Operation.java Plus.java Moins .java

course: $ (JCR) Opération

propre: $ (RM) * .class

+0

Essayez de formater votre 'Makefile' en tant que code en utilisant le bouton' 101'. – trashgod

0

vous devez exécuter javac -g Plus.java Minus.java (non .class)

+0

Je ne pense pas comprendre. Je vous montre mon makefile au lieu peut-être que je cand trouve cette façon: JCC = javac RJC = java JFLAGS = -g par défaut: Operation.class Plus.class: Plus.java \t $ (JCC) $ (JFLAGS) Plus.java Minus.class: Minus.java \t $ (JCC) $ (JFLAGS) Minus.java Operation.class: Operation.class \t $ (JCC) $ (JFLAGS) Operation.class Exécutez: Operation.cla ss \t $ (JCR) Operation.class \t propre: \t $ (RM) * .class – mistique

3

Vous devez passer les noms des fichiers source à javac:

javac -g Plus.java 

Une meilleure option est peut-être:

javac -g *.java 

Très peu de personnes dans le monde Java appellent javac directement ou utilisent des fichiers makefiles. La plupart des gens utilisent un IDE lors du développement:

Eclipse: http://www.eclipse.org
Netbeans: http://www.netbeans.org

Et puis un outil de construction plus complet pour la finale/automatisée builds:

Ant: http://ant.apache.org/
Maven: http://maven.apache.org/

Les deux peuvent être invoqués depuis make, ou invoke make them, afin de s'intégrer avec votre système de construction existant tem.

EDIT: Il semble que vous ayez un problème avec makefile. Voir si cela fonctionne:

JCC = javac 
JCR = java 
JFLAGS = -g 

all: 
[TAB]$(JCC) $(JFLAGS) *.java 

run: 
[TAB]$(JCR) Operation 

clean: 
[TAB]$(RM) *.class 

Remplacer [TAB] avec un caractère de tabulation réelle - comme vous le savez sans doute cela est extrêmement important dans faire!

+0

Cest la chose. Je travaille actuellement sur un projet que j'ai à nous ces choses et pas les IDE. – mistique

+0

Merci, mais l'onglet est là. Il n'apparaît tout simplement pas dans le message – mistique

+0

+1 pour 'ant', bien qu'utiliser' make' de cette façon puisse être instructif. – trashgod

0

Essayez ceci. Hélas, la gestion des dépendances de classes Java est un problème avec make (comme cela a été fait dans des projets relativement importants), vous devriez donc sérieusement envisager d'utiliser Ant ou un autre outil approprié.

JCC = javac 

JCR = java 

JFLAGS = -g 

default: Operation.class 

Plus.class: Plus.java 
      $(JCC) $(JFLAGS) Plus.java 

Minus.class: Minus.java 
      $(JCC) $(JFLAGS) Minus.java 

Operation.class: Operation.java Plus.class Minus.class 
       $(JCC) $(JFLAGS) Operation.java 

run: Operation.class 
    $(JCR) Operation.class 

clean: $(RM) *.class