3
我試圖創建一個Makefile,將編譯和運行馬爾可夫算法的3種不同的實現方式的一次。我是新來的makefile,所以如果有多個錯誤,請讓我知道。另外,如果我想用-O3優化編譯,我會在那裏做什麼?如何使一個makefile,將編譯C,C++和Java都在文件一旦
當我跑,我目前得到這些錯誤:
的Makefile:28:警告:覆蓋爲目標`markov.o」命令
的Makefile:22:警告:無視目標舊命令`markov.o」
化妝:*沒有規則,使目標
Markov.java', needed by
java_markov.class'。停止。
這裏是我的makefile代碼:
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)
第4行,你設置CC爲gcc(GNU編譯器集合),設置爲g ++後。在我的計算機上使用.cpp文件上的gcc不起作用,因爲它最終會運行C編譯器。嘗試在.c源文件中使用一個用於gcc的變量,另一個用於.cpp源文件中的g ++ – Pete
爲什麼這必須是make文件?爲C和C++版本創建一個make文件,然後在shell或python腳本中運行。 – Falmarri