2011-12-01 28 views
-1

我有一個頭文件sieve.h,它沒有cpp文件。以下是我對makefile文件截至目前:我的簡單g ++ Makefile有什麼問題?

bitarray_executable: bitarray.o sieve.o main.o 
    g++ -o bitarray.out bitarray.o sieve.o main.o 

sieve.o: sieve.h 
    g++ -o sieve.o -c sieve.h 

main.o: main.cpp bitarray.h sieve.h 
    g++ -o main.o -c main.cpp 

clean: 
    rm -f *.o bitarray 

我得到的錯誤,當我做它:

g++ -o sieve.o -c sieve.h 
sieve.h:15: error: expected `)' before ‘&’ token 
make: *** [sieve.o] Error 1 

這是篩:

#ifndef _SIEVE_H 
#define _SIEVE_H 

#include <iostream> 

#include "bitarray.h" 
using namespace std; 

class Sieve 
{ 
public: 
    Sieve(BitArray& x) 
    { 
     for (int i = 0; i < x.Length; i++) 
     x.Set(i); 
    } 

}; 

#endif 

任何人有更多的經驗寫作makefiles告訴我這有什麼問題?

+1

錯誤位於'sieve.h',而不是makefile。 –

+0

剛編輯sieve.h in。我不確定它在那裏。 – jordaninternets

回答

1

從喜歡的.cpp或.c和.C++
假設sieve.h文件編譯.o文件被納入的main.cpp因爲你的國家,它沒有任何的.cpp再沒有什麼編譯它,但是當你有main.o做,你可以指定其他依賴規則

你有沒有bitarray細節,所以我會認爲這是一個提供的ob JECT文件,或者遵循默認/隱含規則作出的.o

因此您make文件可以簡化爲(這幾乎是有什麼fazo)

bitarray_executable: bitarray.o main.o 
    g++ -o bitarray.out bitarray.o main.o 

main.o: main.cpp bitarray.h sieve.h 
    g++ -o main.o -c main.cpp 

clean: 
    rm -f *.o bitarray 

爲了進一步整理了一下,假設用於製作.o文件的默認規則

objects := $(patsubst %.cpp,%.o,$(wildcard *.cpp)) 

bitarray_executable: bitarray.out 

bitarray.out: $(objects) 
    g++ -o bitarray.out $(objects) 

main.o: main.cpp bitarray.h sieve.h 

clean: 
    rm -f *.o bitarray.out 
+0

我收到來自'makefile:2:*** missing missing'的錯誤消息。停止.' – jordaninternets

+0

沒關係。這是由於不打字,而是複製和粘貼。謝謝! – jordaninternets

3

正在編譯頭文件

刪除

sieve.o: sieve.h 
    g++ -o sieve.o -c sieve.h 
+0

我把它變成這樣: 'bitarray_executable:bitarray.o sieve.o main.o 克++ -o bitarray.out bitarray.o sieve.o main.o main.o:main.cpp中bitarray.h sieve.h 克++ -o main.o -c的main.cpp 清潔: \t RM -f *的.o bitarray' 但我告訴'使:***沒有規則,使目標'sieve.o ','bitarray_executable'需要。 Stop.' – jordaninternets