3 Stimmen

Warum verwendet g++ nicht die Option -I?

Ich versuche, eine kleine, in C++ geschriebene Software unter Linux zu vertreiben, die openGL und SFML verwendet. Ich versuche, die SFML-Bibliotheken und -Header mit meinem Code zur Verfügung zu stellen, um die Installation von SFML zu vermeiden (die Benutzer haben keinen Root-Zugang, aber sie haben alle für OpenGL erforderlichen Dinge installiert).

Meine Dateihierarchie sieht folgendermaßen aus:

  • lib/ >> hier kommen alle sfml-Bibliotheken (.so-Dateien)
  • Makefile >> später zeige ich den Code
  • src/ >> Hier geht es zu den Programm- und sfml-Quellen
    • myfiles.h, myfiles.cpp >> alle kompilieren und funktionieren problemlos mit den sfml-Bibliotheken, die unter /usr/lib installiert sind
    • SFML/ >> hier kommen alle SFML-Header hin, hat einige Unterordner

Hier ist mein 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)

Wenn ich make auf einem PC (Ubuntu 11.10) ausführe, auf dem sfml in /usr/lib installiert ist, geht alles gut, wenn ich es auf einem PC ausführe, auf dem es nicht installiert ist, sagt es:

...
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

Das folgende Codestück zeigt das Include von 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

Ich habe versucht, die #include "whatever/Window.hpp" ,den src/SFML-Ordnernamen für was auch immer zu ändern und die Option -I des Linkers nicht zu verwenden, aber src/SFML/Window.hpp (und andere sfml-Header) haben include-Zeilen wie diese #include < SFML/Window/Whatever.hpp > Ich brauche sie also für die Suche in dem von mir angegebenen Pfad.

Habe ich etwas verpasst? Ich vermute, es ist ein Fehler in meinem Makefile, aber ich habe nicht so viel Erfahrung damit...

Vielen Dank im Voraus!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X