我正在嘗試在使用openGL和SFML的Linux上分發一些用C++編寫的軟件。我試圖爲我的代碼提供sfml庫和頭文件,以避免安裝sfml(使用它的人沒有root權限,但他們將安裝所有需要的東西)。爲什麼g ++不使用-I選項?
我的文件層次結構如下所示:
- 的lib/>>這裏去所有SFML庫(.so文件)
- Makefile文件>>後,我展示的代碼
- 的src/>>這裏去計劃和SFML來源
- myfiles.h,myfiles.cpp >>全部編譯和安裝在/ usr/lib目錄
- SFML的SFML庫好吧工作/ >>這裏去所有SFML頭,已小號青梅子
這裏是我的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)
當我運行make在PC(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 2012-02-08 01:39:46
這是一個比風格約定稍微多一點 - 隱式的'%.o:%.c'規則使用'CC'和'CFLAGS',隱式的'%.o: %.cpp規則使用'CXX'和'CXXFLAGS'。 (他們倆都使用'CPPFLAGS'。) – zwol 2012-02-08 01:59:37
很高興知道!你能推薦我一個Makefile教程或參考手冊嗎? – rogelius 2012-02-08 02:35:19