0

我正在尝试为用 C++ (OSX) 编写的 OpenGL 程序编写生成文件。

现在,只有单个文件 chess.cpp,但我希望将其他文件添加到项目中,所以我正在尝试创建一个生成文件,我可以根据需要扩展它以处理新文件。我收到这些错误:

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
4

1 回答 1

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指定输出。也$缺少a (LDFLAGS)。正确的语法应该是:

chess: chess.o
    $(CC) chess.o -o chess $(LDFLAGS)
于 2013-09-22T21:25:11.807 回答