4

そこで、特定のデータ構造の効率をテストするプログラムを作成しています。私はすべての .h ファイルを持っており、ある程度までは機能しているように見えますが、おそらく間違っている非常にひどいメイクファイルを作成しました。.o ファイルを作成する代わりに .gch ファイルを作成するため、すべての .o ファイルにアクセスしようとしても見つかりません。これは私のメイクファイルです

prog1: main.o dsexceptions.o BinarySearchTree.o SplayTree.o RedBlackTree.o AvlTree.o
                g++ -Wall -g -o prog1 main.o dsexceptions.h.gch BinarySearchTree.h.gch SplayTree.h.gch RedBlackTree.h.gch AvlTree.h.gch

main.o: main.cpp AvlTree.h RedBlackTree.h SplayTree.h BinarySearchTree.h dsexceptions.h
                g++ -Wall -g -c main.cpp

#shape.o: shape.cpp shape.h grid.h
#               g++ -Wall -g -c shape.cpp

dsexceptions.o: dsexceptions.h
                g++ -Wall -g -c dsexceptions.h

BinarySearchTree.o: BinarySearchTree.h dsexceptions.h
                    g++ -Wall -g -c BinarySearchTree.h

SplayTree.o: SplayTree.h dsexceptions.h
             g++ -Wall -g -c SplayTree.h

RedBlackTree.o: RedBlackTree.h dsexceptions.h
                g++ -Wall -g -c RedBlackTree.h

AvlTree.o: AvlTree.h dsexceptions.h
           g++ -Wall -g -c AvlTree.h

clean:
                rm -f main main.exe  main.o dsexceptions.o BinarySearchTree.o SplayTree.o RedBlackTree.o AvlTree.o *.gch
4

3 に答える 3

19

.h ファイルをコンパイラに渡したくありません。.h ファイルを含める必要がある .cpp ファイルのみをコンパイルします。(.gch ファイルはプリコンパイル済みヘッダーです。) ヘッダーに .o ファイルは必要ありません。.cpp ファイルに #include するだけです。

prog1: main.o
        g++ -Wall -g -o prog1 main.o

main.o: main.cpp AvlTree.h RedBlackTree.h SplayTree.h BinarySearchTree.h dsexceptions.h
        g++ -Wall -g -c main.cpp

clean:
        rm -f prog1 main.o
于 2009-09-25T03:59:18.280 に答える
1

そして、念のために、ここに私のSConstructがあります。SConsの方がはるかに優れているからです:)

Program('main.cpp') # Yeah, it's that simple :)

ここでSConsを見ることができます。

于 2009-10-01T18:40:12.383 に答える
1

あなたはすでに bstpierre からの解決策を持っていますが、楽しみのために、あなたのメイクファイルの私のバージョンがあります:

CC = g++ -壁 -g -o $@

MODULE = AvlTree BinarySearchTree RedBlackTree SplayTree
OBJECTS = $(addsuffix .o,$(MODULES))

prog1: main.o dsexceptions.o $(OBJECTS)
       $(CC) $^

main.o: $(addsuffix .h,$(MODULES))

$(OBJECTS) main.o : %.cpp %.h dsexceptions.h
    $(CC) -c $<

掃除:
 rm -f main main.exe *.o *.gch
于 2009-09-25T21:01:56.123 に答える