我正在尝试为用C ++(OSX)编写的OpenGL程序编写一个makefile。
现在,只有一个文件chess.cpp,但我希望将其他文件添加到项目中,所以我正在尝试创建一个makefile,我可以扩展它以根据需要处理新文件。我收到了这些错误:
clang: error: no such file or directory: 'chess.o'
clang: warning: -framework GLUT: 'linker' input unused
clang: warning: -framework OpenGL: 'linker' input unused
make: *** [chess.o] Error 1
这是我创建的makefile。它是从我通常用于C程序的东西中借来的,所以如果它看起来很奇怪,那就是原因。如何才能使我的C ++项目有效?
CC = g++
CFLAGS = -c -g -Wall -Wextra
DEPS =
LDFLAGS = -framework GLUT -framework OpenGL
all: chess
%.o: %.cpp $(DEPS)
$(CC) -c -o $@ $< $(CFLAGS)
chess.o: chess.cpp
$(CC) -c chess.cpp chess.o $(LDFLAGS)
chess: chess.o
$(CC) -o chess.o (LDFLAGS)
clean:
rm chess
rm *.o
答案 0 :(得分:2)
有几个错误:
首先:
%.o: %.cpp $(DEPS)
$(CC) -c -o $@ $< $(CFLAGS)
这会将.cpp
中的所有$(DEPS)
个文件和所有内容编译到各自的.o
文件中。
这使得以下行变得多余:(虽然这行附加了前面没有的链接器标志)
chess.o: chess.cpp
$(CC) -c chess.cpp chess.o $(LDFLAGS)
即便如此,这条线也有错误。它缺少输出文件选项-o
。正确的语法是:
chess.o: chess.cpp
$(CC) -c chess.cpp -o chess.o $(LDFLAGS)
最后:
chess: chess.o
$(CC) -o chess.o (LDFLAGS)
这一行缺少输入参数。 Make不知道要编译什么。您还使用依赖项文件名作为输出参数。选项-o
后面的文件名指定输出。 $
还缺少(LDFLAGS)
。正确的语法应为:
chess: chess.o
$(CC) chess.o -o chess $(LDFLAGS)