2011-12-08 12 views
3

私は、markovアルゴリズムの3つの異なる実装を一度にコンパイルして実行するMakefileを作成しようとしています。私はmakefilesに新しいので、複数の間違いがある場合は、私に知らせてください。また、コンパイル時に-O3を使用して最適化したいのであれば、どこでそれを行うのでしょうか?私は実行するとC、C++、Javaファイルを一度にコンパイルするmakefileの作成方法

は、私は現在、これらのエラーを取得:

のMakefile:28:警告:ターゲット `markov.o」のコマンドをオーバーライド

のMakefile:22:警告:ターゲットの古いコマンドを無視`markov.o '

make:*ターゲットを作るルールはありませんMarkov.java', needed by java_markov.class'。やめる。ここで

私のメイクのためのコードです:

javaC=javac 
javaR=java 
CC=g++ 
CC=gcc 

CFLAGS=-O0 
OPT=-deprecation 
TARGET1=./java_markov 
TARGET2=./markov_cpp 
TARGET3=./markov_c 
INFILE=./alice30.txt 
OUTFILE1=./markov_java_out.txt 
OUTFILE2=./output/markov_cpp_out.txt 
OUTFILE3=./output/markov_c_out.txt 

$(TARGET1).class: Markov.java 
    $(javaC) Markov.java 

$(TARGET2): markov.o 
    $(CC) $(CFLAGS) -o $(TARGET2) markov.o 
markov.o: markov.cpp 
    $(CC) $(CFLAGS) -c markov.cpp 


$(TARGET3) : markov.o eprintf.o 
    $(CC) $(CFLAGS) -o $(TARGET3) markov.o eprintf.o 
markov.o : markov.c 
    $(CC) $(CFLAGS) -c markov.c 
eprintf.o : eprintf.c eprintf.h 
    $(CC) $(CFLAGS) -c eprintf.c 

clean: 
    rm -f *.class $(OUTFILE1) 
    rm -f *.o $(TARGET2) $(OUTFILE2) 
    rm -f *.o $(TARGET3) $(OUTFILE3) 
run: $(TARGET1).class 
    $(javaR) $(TARGET1) < $(INFILE) > $(OUTFILE1) 
    $(TARGET2) 
    $(TARGET2) <$(INFILE) >$(OUTFILE2) 
    $(TARGET3) 
    $(TARGET3) < $(INFILE) > $(OUTFILE3) 
+0

4行目では、g ++(GNUコンパイラコレクション)をg ++に設定した後、これを4行目に設定します。 .cppファイルでgccを使用している私のコンピュータでは、Cコンパイラの実行が終了するため、動作しません。 .cppソースでgcc用に1つの変数を使用し、.cppソースでg ++用にもう1つの変数を使用してみてください – Pete

+0

なぜmakeファイルでなければなりませんか? CとC++バージョン用のmakeファイルを作成し、シェルやPythonスクリプトで実行します。 – Falmarri

答えて

3
  • あなたはがmarkov.oを作るために2つのルールを持っています。実際に同じフォルダにCとC++のポートがある場合は、その名前を変更してみてください。

    markov-c++.o: markov.cpp 
    $(TARGET2): markov-c++.o … 
    
  • あなたは本当にあなたがこれ以上.o年代にリンクしていない場合は、中間.oファイルで2段階のコンパイルを使用するを持っていません。あなただけの他の警告がディレクトリにMarkov.javaという名前のファイルがありませんことを示し

    $(TARGET2): markov.cpp 
        $(CC) $(CFLAGS) markov.cpp -o $(TARGET2) 
    
  • 行うことができます。それはおそらくサブディレクトリか何かにありますか?

  • make runはかなり壊れています:-)私は、前提条件の行に3つのターゲットをすべて入れたいと思っていますか?

関連する問題