gpt4 book ai didi

c++ - 为什么 g++ 不使用 -I 选项?

转载 作者:太空狗 更新时间:2023-10-29 21:05:43 29 4
gpt4 key购买 nike

我正在尝试在使用 openGL 和 SFML 的 Linux 上分发用 C++ 编写的小软件。我正在尝试为我的代码提供 sfml 库和 header ,以避免安装 sfml(使用它的人没有 root 访问权限,但他们将安装所有 openGL 所需的东西)。

我的文件层次结构如下:

  • 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)

当我在 PC (Ubuntu 11.10) 中运行 make 并在/usr/lib 中安装了 sfml 时一切顺利,如果我在没有安装它的 PC 中运行它会说:

...
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 "whatever/Window.hpp",更改 src/SFML 文件夹名称,不使用链接器上的 -I 选项,而是 src/SFML/Window .hpp(和其他 sfml header )包含类似 #include < SFML/Window/Whatever.hpp > 的行,因此我需要它们在我指定的路径中搜索。

我错过了什么吗?我想这是我的 Makefile 的错误,但我没有太多经验......

提前致谢!

最佳答案

您需要将-I$(INCDIR) 放入CPPFLAGS,而不是LDFLAGS。然后它会被编译单个目标文件的内置规则选中。

您还应该将 CFLAGS 重命名为 CXXFLAGS 并将 CC 重命名为 CXXCCCFLAGS 用于 C 源文件,而不是 C++ 源文件。

你不应该$(EJECUTABLE)依赖于clean,你不应该执行rm -f $(MODULOS ) 在链接命令之后。这些东西违背了 Makefile 的目的,即只重新编译必要的部分,而不是每次都重新编译整个程序。

关于c++ - 为什么 g++ 不使用 -I 选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9186582/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com