Я пытаюсь распространять небольшое программное обеспечение, написанное на C++ в Linux, которое использует openGL и SFML. Я пытаюсь предоставить sfml-библиотеки и заголовки с моим кодом, чтобы избежать установки sfml (люди, которые будут использовать его, не имеют корневого доступа, но у них будет все необходимое для работы с OpenGL).Почему g ++ не использует параметр -I?
Моя файловая иерархия выглядит следующим образом:
- Библиотека/>> здесь идет все библиотеки SFML (.so файлы)
- Makefile >> Я позже показать код
- SRC/>> здесь идет программа и SFML источники
- myfiles.h, myfiles.cpp >> все их компилировать и работать Allright с SFML библиотек, установленных в/USR/Lib
- SFML/>> здесь идет все заголовки SFML, имеет s екоторые подпапок
Вот мой Makefile:
EJECUTABLE = app
MODULOS = src/main.o src/Handbapp.o src/Camera.o src/Light.o src/Scene.o src/Graphics.o src/Window.o src/Model.o src/Court.o src/Player.o src/Primitives.o src/Path.o
CC = g++
LIBDIR = ./lib
INCDIR = ./src
LIBS = -lsfml-window -lsfml-system -lGLU
LDFLAGS = -L$(LIBDIR) -I$(INCDIR)
CFLAGS = -v -Wl,-rpath,$(LIBDIR)
$(EJECUTABLE): clean $(MODULOS)
$(CC) $(CFLAGS) -o $(EJECUTABLE) $(LDFLAGS) $(MODULOS) $(LIBS)
rm -f $(MODULOS)
clean:
rm -f $(MODULOS) $(EJECUTABLE)
Когда я бегу сделать в ПК (Ubuntu 11.10) с SFML установлен в/USR/Lib это все идет хорошо, если я в один, который не имеет его установки он говорит:
...
g++ -c -o src/main.o src/main.cpp
In file included from src/main.h:18:0,
from src/main.cpp:10:
src/Handbapp.h:17:44: fatal error: SFML/Window.hpp: File or directory doesn't exist
Compilation finished.
make: *** [src/main.o] Error 1
Вот фрагмент кода, показывающий, включают в Handbapp.h:
...
#ifndef HANDBAPP_H
#define HANDBAPP_H
// Espacio de nombres
using namespace std;
// Librerias
#include <GL/gl.h> // OpenGL
#include <GL/glu.h> // Utilidades OpenGL
#include <SFML/Window.hpp> // Ventanas SFML <- LINE 17
#include <SFML/System.hpp> // SFML
Я попытался сделать #include "все/Window.hpp", изменение SRC/SFML имя папки для любой, а не с помощью опции -I на линкер, но SRC/SFML/Window.hpp (и другие заголовки sfml) имеют такие строки, как #include < SFML/Window/Whatever.hpp>, поэтому мне нужно, чтобы они искали путь, который я указываю.
Я что-то не хватает? Я думаю, что это ошибка с моим Makefile, но у меня нет такого большого опыта с этим ...
Заранее благодарен!
Спасибо, это сработало! Я предполагаю, что ошибка произошла из моего -I $ (INCDIR), находящегося в LDFLAGS. CXXFLAGS и CXX - это соглашение о стиле, не так ли? Я буду использовать его правильно, thx снова :) – rogelius
Это немного больше, чем соглашение о стиле - неявное '.% .O:% .c' правило использует' CC' и 'CFLAGS', неявное'% .o: Правило .cpp' использует 'CXX' и' CXXFLAGS'. (Оба они также используют 'CPPFLAGS'.) – zwol
Полезно знать об этом! Можете ли вы порекомендовать мне учебник Makefile или справочное руководство? – rogelius