0

この C++ プロジェクトを Xcode で作成しましたが、適切にコンパイルできるように Makefile を作成する必要があります。Makefile は次のとおりです。

CC = g++
CFLAGS =

PROG = TrainStation
MAIN = main.cpp
OBJS = ArrivalEvent.o DepartureEvent.o Event.o EventCoordinator.o InSwitchEvent.o ListItem.o OrderedList.o OutSwitchEvent.o PriorityQueue.o Train.o

# compiling rules

# WARNING: *must* have a tab before each definition
$(PROG): $(OBJS) main.o # The error was leaving out main.o from this line
    $(CC) $(CFLAGS) $(OBJS) main.o -o $(PROG)

ArrivalEvent.o: ArrivalEvent.cpp ArrivalEvent.h EventCoordinator.h InSwitchEvent.h Event.h EventCoordinator.h Train.h
    $(CC) $(CFLAGS) -c ArrivalEvent.cpp -o ArrivalEvent.o

DepartureEvent.o: DepartureEvent.cpp DepartureEvent.h OutSwitchEvent.h Event.h EventCoordinator.h Train.h
    $(CC) $(CFLAGS) -c DepartureEvent.cpp -o DepartureEvent.o

Event.o: Event.cpp Event.h EventCoordinator.h ListItem.h
    $(CC) $(CFLAGS) -c Event.cpp -o Event.o

EventCoordinator.o: EventCoordinator.cpp EventCoordinator.h OrderedList.h Event.h Train.h PriorityQueue.h ArrivalEvent.h InSwitchEvent.h
    $(CC) $(CFLAGS) -c EventCoordinator.cpp -o EventCoordinator.o

InSwitchEvent.o: InSwitchEvent.cpp InSwitchEvent.h DepartureEvent.h Event.h EventCoordinator.h Train.h
    $(CC) $(CFLAGS) -c InSwitchEvent.cpp -o InSwitchEvent.o

ListItem.o: ListItem.cpp ListItem.h
    $(CC) $(CFLAGS) -c ListItem.cpp -o ListItem.o

OrderedList.o: OrderedList.cpp OrderedList.h ListItem.h
    $(CC) $(CFLAGS) -c OrderedList.cpp -o OrderedList.o

OutSwitchEvent.o: OutSwitchEvent.cpp OutSwitchEvent.h Train.h InSwitchEvent.h Event.h EventCoordinator.h
    $(CC) $(CFLAGS) -c OutSwitchEvent.cpp -o OutSwitchEvent.o

PriorityQueue.o: PriorityQueue.cpp PriorityQueue.h OrderedList.h
    $(CC) $(CFLAGS) -c PriorityQueue.cpp -o PriorityQueue.o

Train.o: Train.cpp Train.h ListItem.h
    $(CC) $(CFLAGS) -c Train.cpp -o Train.o

main.o: $(MAIN) Train.h OrderedList.h PriorityQueue.h EventCoordinator.h 
    $(CC) $(CFLAGS) -c $(MAIN) -o main.o

clean:
    rm -f $(PROG) $(OBJS)

私は以前に Makefile を書いたことがありますが、調整するファイルがこれほど多くあるものは一度もありませんでした。また、main.o のルールをスキップしているようです [編集: Makefile を更新しましたが、この別のエラーが発生しました]

$ make
g++  -c ArrivalEvent.cpp -o ArrivalEvent.o
g++  -c DepartureEvent.cpp -o DepartureEvent.o
g++  -c Event.cpp -o Event.o
g++  -c EventCoordinator.cpp -o EventCoordinator.o
g++  -c InSwitchEvent.cpp -o InSwitchEvent.o
g++  -c ListItem.cpp -o ListItem.o
g++  -c OrderedList.cpp -o OrderedList.o
g++  -c OutSwitchEvent.cpp -o OutSwitchEvent.o
g++  -c PriorityQueue.cpp -o PriorityQueue.o
g++  -c Train.cpp -o Train.o
g++  main.o ArrivalEvent.o DepartureEvent.o Event.o EventCoordinator.o InSwitchEvent.o ListItem.o OrderedList.o OutSwitchEvent.o PriorityQueue.o Train.o -o TrainStation
i686-apple-darwin11-llvm-g++-4.2: main.o: No such file or directory
make: *** [TrainStation] Error 1

これはg ++のエラーであり、おそらくファイルをどこかに置いていないか、リンクしていないことに関係していることはわかっていますが、何が問題なのかわかりません。おそらく、新鮮な目を持つ人が問題を見つけることができるでしょうか?

編集:問題は解決しました

私の問題は、$(OBJS)が含まれていないmain.oため、 のルール$(PROG)はまったく依存しないことでしmain.oた。main.oのルールに追加すると、$(PROG)のルールmain.oが正しく実行されます。

4

1 に答える 1

2

その後MAIN = main.cpp、この変数を使用してmain.cppファイルをコンパイルおよびリンクしないでください。

これを変える:

$(CC) $(CFLAGS) $(OBJS) -o $(PROG)

これに:

$(CC) $(CFLAGS) $(OBJS) main.o -o $(PROG)
于 2013-03-15T14:11:37.043 に答える