2013-09-22 3 views
0

Я пытаюсь написать make-файл для программы OpenGL, написанной на C++ (OSX).Makefile для простой C++ OpenGL-программы

В настоящее время существует только один файл chess.cpp, но я ожидаю добавить другие файлы в проект, поэтому я пытаюсь создать make-файл, который я могу расширить, чтобы обрабатывать новые файлы по мере необходимости. Я получаю эти ошибки:

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 [email protected] $< $(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

Вы забыли '-o' опцию на линии:' chess.o: chess.cpp $ (CC) -c chess.cpp chess.o $ (LDFLAGS) ' , – Snps

ответ

2

Там есть пара ошибок:

Первое:

%.o: %.cpp $(DEPS) 
    $(CC) -c -o [email protected] $< $(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) 
+0

Спасибо. Когда-нибудь я действительно пойму make-файлы. Не знаю, почему они так запутывают меня. Я ценю вашу помощь. – Alex

+0

Обычно вы добавляете флаги компоновщика на этапе компиляции (т. Е. .cpp → .o), потому что в это время нет связи. – datenwolf

Смежные вопросы