Makefile用于简单的C ++ OpenGL程序

时间:2013-09-22 20:36:31

标签: c++ opengl makefile

我正在尝试为用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

1 个答案:

答案 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)