2011-12-01 58 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