Makefile с относительными путями? - PullRequest
5 голосов
/ 31 июля 2011

У меня проблема с моими Makefiles в Gentoo Linux.

Вот моя иерархия папок:

Development
 -> GLTools  
   -> include    
   -> src

->Triangle    
  ->triangle.cpp    
  ->Makefile

и мой Makefile:

MAIN = triangle
SRCPATH = ./
SHAREDPATH = ../GLTools/src/
SHAREDINCPATH = ../GLTools/include/
LIBDIRS = -L/usr/local/lib
INCDIRS = -I/usr/include -I/usr/local/include -I/usr/include/GL \    
              -I$(SHAREDINCPATH)  -I$(SHAREDINCPATH)GL

CC = g++
CFLAGS = $(COMPILERFLAGS) -g $(INCDIRS)
LIBS = -lglut -lGL -lGLU -lm

prog : $(MAIN)

$(MAIN).o : $(SRCPATH)$(MAIN).cpp
glew.o    : $(SHAREDPATH)glew.c
GLTools.o    : $(SHAREDPATH)GLTools.cpp
GLBatch.o    : $(SHAREDPATH)GLBatch.cpp
GLTriangleBatch.o    : $(SHAREDPATH)GLTriangleBatch.cpp
GLShaderManager.o    : $(SHAREDPATH)GLShaderManager.cpp
math3d.o    : $(SHAREDPATH)math3d.cpp

$(MAIN) : $(MAIN).o glew.o
     $(CC) $(CFLAGS) -o $(SRCPATH)$(MAIN) $(LIBDIRS) $(SRCPATH)$(MAIN).cpp \
         $(SHAREDPATH)glew.c $(SHAREDPATH)GLTools.cpp $(SHAREDPATH)GLBatch.cpp\ 
         $(SHAREDPATH)GLTriangleBatch.cpp $(SHAREDPATH)GLShaderManager.cpp \
         $(SHAREDPATH)math3d.cpp $(LIBS)

clean:
    rm -f *.o

Моя проблемав том, что получается следующая ошибка:

demonking@Master ~/Development/Triangle $ make
g++    -c -o triangle.o triangle.cpp
triangle.cpp:4:50: error: GLTools.h: No such file or directory
triangle.cpp:5:56: error: GLShaderManager.h: No such file or directory

Но когда я копирую свой Makefile в папку Development (папка на один уровень выше) и редактирую мои пути, он компилируется без ошибок.

Почемуя получаю сообщение об ошибке, когда мои triangle.cpp и Makefile находятся в одной папке, и я пытаюсь получить доступ к GLTools в родительской папке?

Ответы [ 2 ]

4 голосов
/ 31 июля 2011

Правило по умолчанию для компиляции c ++ использует CXXFLAGS вместо CFLAGS, и вы не установили его, поэтому оно не включает INCDIRS.

Add

CXXFLAGS = $(COMPILERFLAGS) -g $(INCDIRS)

и попробуйте еще раз.

То, как вы сами это заметили, можно прочитать в выводе команды make.Обратите внимание на первую строку в выводе, который вы демонстрируете:

g++    -c -o triangle.o triangle.cpp

Не включать флаги.Нет -g.Ничего из того, что вы взяли на себя, чтобы настроить.

1 голос
/ 31 июля 2011

Попробуйте установить флаги для g ++

CXXFLAGS = $(CFLAGS)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...