2012-11-05 44 views
0

我想讓我的makefile工作,但它給了我一些錯誤,我無法讓它工作。Makefile不起作用

OBJS = Kmeans.o cluster.o data.o 
    CC = g++ 
    DEBUG = -g 
    CFLAGS = -Wall -c $(DEBUG) 
    LFLAGS = -Wall $(DEBUG) 

    clustering : $(OBJS) 
     $(CC) $(LFLAGS) $(OBJS) -o clustering 

    Kmeans.o : Kmeans.h Kmeans.cpp cluster.h data.h 
     $(CC) $(CFLAGS) Kmeans.cpp 

cluster.o : cluster.h cluster.cpp data.h 
    $(CC) $(CFLAGS) cluster.cpp 

data.o : data.h data.cpp 
    $(CC) $(CFLAGS) data.cpp 

clean: 
    \rm *.o *~ clustering 

而且文件是:

clustering.cpp -> #include "Kmeans.h" 
Kmeans.cpp  -> #include "Kmeans.h" 
Kmeans.h  -> #include "cluster.h" 
cluster.cpp -> #include "cluster.h" 
cluster.h  -> #include "data.h" 
data.cpp  -> #include "data.h" 

我在做什麼錯?

編輯: 對不起,我忘了,包括錯誤:

Kmeans.o: In function `Kmeans::read(char*)': 
Kmeans.cpp:(.text+0x53c): undefined reference to `Data::~Data()' 
cluster.o: In function `Cluster::Cluster(int, int, int)': 
cluster.cpp:(.text+0x45): undefined reference to `Data::~Data()' 
cluster.cpp:(.text+0x80): undefined reference to `Data::~Data()' 
cluster.o: In function `Cluster::Cluster()': 
cluster.cpp:(.text+0xca): undefined reference to `Data::~Data()' 
cluster.cpp:(.text+0x110): undefined reference to `Data::~Data()' 
cluster.o: In function `Cluster::setData(int, int, int)': 
cluster.cpp:(.text+0x158): undefined reference to `Data::~Data()' 
collect2: ld devolvió el estado de salida 1 
make: *** [clustering] Error 1 

謝謝!

我編譯每個文件和問題是在最後一行:似乎

g++ -c -o clustering.o clustering.cpp 
g++ -c -o data.o data.cpp 
g++ -c -o Kmeans.o Kmeans.cpp 
g++ -c -o cluster.o cluster.cpp 
g++ -o clustering clustering.o data.o Kmeans.o cluster.o <---- 
+0

*請問什麼*錯誤? –

回答

1

看來你有Data::~Data申報data.h和你沒有任何定義。

只需從頭文件中刪除聲明或添加空定義它它是一個虛擬的析構函數。

+0

這是問題,謝謝! – Alex

0

的錯誤不會在你的makefile,但是如果在你的CPP文件。嘗試手動編譯它,然後使用makefile將其自動化。

這可能是因爲你忘了寫在data.cpp

的Makefile中的Data::~Data()定義應該是這樣的:

#list of pseudo variables here 

executable: object1.o object2.o object3.o 
     ld -r object1.o object2.o object3.o -o executable 

object1.o : object1.cpp 
     $(CC) object.cpp -o object1.o 

object2.o : object2.cpp 
     $(CC) object2.cpp -o object2.o 

object3.o : object3.cpp 
     $(CC) object3.cpp -o object3.o 
+0

我可以編譯每個文件沒有問題,但在最後一部分失敗: g ++ -c -o clustering.o clustering.cpp g ++ -c -o data.o data.cpp g ++ -c -o Kmeans.o Kmeans.cpp g ++ -c -o cluster.o cluster.cpp g ++ -g -v -o clustering clustering.o data.o Kmeans.o cluster.o – Alex

+0

@Alex,爲什麼當你使用$(CC)鏈接時必須使用ld? –

+0

我改變了,但問題沒有解決 – Alex