在使用Xcode编写的C++项目时遇到问题
我在Xcode中编写了这个C++项目,现在我必须创建一个Makefile以便它能够正确编译。这里是Makefile中:在使用Xcode编写的C++项目时遇到问题
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
的规则会正确执行。
在MAIN = main.cpp
之后,您从不使用此变量编译和链接main.cpp文件。
更改此:
$(CC) $(CFLAGS) $(OBJS) -o $(PROG)
这样:
$(CC) $(CFLAGS) $(OBJS) main.o -o $(PROG)
我这样做,但现在我得到另一个错误。在执行Train.o的规则后,它跳转到第一条规则,然后说main.o不存在。 它似乎完全忽略了main.o – MichaelThiessen 2013-03-15 14:19:16
@MichaelThiessen的规则,你为什么不让XCode为你创建Makefile? – Shoe 2013-03-15 14:20:40
Xcode不导出Makefiles。 – MichaelThiessen 2013-03-15 14:26:49
grep的为其中'_main'被定义,并检查是否是包含上述 – 2013-03-15 14:10:47
'main.o'没有被连接时,由于它也没有编译,但这是次要的。 – 2013-03-15 14:12:19
_main在任何地方都不是由我定义的。我很确定这是一些内部编译器的东西。 – MichaelThiessen 2013-03-15 14:18:10