【问题标题】:C++ Dependencies directories between files文件之间的 C++ 依赖关系目录
【发布时间】:2021-09-01 05:42:19
【问题描述】:

我的编译器在目录中搜索文件时出现问题。我在 Windows 10 上。

首先,我的文件是这样组织的:

  • C:/mingw64/bin/g++(我的编译器在这里)
  • C:/Users/Christophe/Documents/main.cpp(我的文件)
  • C:/Users/Christophe/Documents/SFML/include (我的文件.hpp)
  • C:/Users/Christophe/Documents/SFML/lib (???)

我有 9 个文件 .hpp,它们是:

  • 音频.hpp
  • 配置.hpp
  • GpuPreference.hpp
  • Graphics.hpp
  • Main.hpp
  • Network.hpp
  • OpenGL.hpp
  • System.hpp
  • Window.hpp

我有我的 main.cpp,这是查看我的 SMFL 是否有效的示例:

#include <Graphics.hpp>

int main(){
    sf::RenderWindow window(sf::VideoMode(200, 200), "SFML works!");
    sf::CircleShape shape(100.f);
    shape.setFillColor(sf::Color::Green);
    while (window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                window.close();
        }
        window.clear();
        window.draw(shape);
        window.display();
    }
    return 0;
}

问题是我的编译器说:“没有这样的文件或目录#include 为红色。

我试图通过 VisualStudioCode 在每个文件 .hpp 的 .json 中使用 IncludePaths 找到解决方案,但它不起作用。

我也试过在我的终端上输入一个命令:g++ -I/SFML/include main.cpp -o EX 但我有上面的错误。

或者:g++ -I/SFML/include/** main.cpp -o EX 但这次是红色的#include

我不明白他为什么会提出这个错误,因为我没有包含它......它似乎无法识别我的路径或在 .hpp 之间存在依赖关系。也许解决方案在目录“lib”中,但我不知道如何指定或操作它。

我从昨天开始就被屏蔽了,希望你能帮助我。

克里斯托夫。

【问题讨论】:

  • 您的 -I 标志应该指向一个文件夹,例如 -I/SFML/include 您可能还希望在主目录中包含#include 。按照官方的 SFML 入门正确设置您的项目sfml-dev.org/tutorials/2.5
  • 感谢您的回答。但是,这些教程涉及 Code::block 或旧版本的 VisualStudio。我没有他们的选择。我正在尝试制作一个“Makefile”来链接我的库。

标签: c++ compiler-errors directory dependencies


【解决方案1】:

如果我是你,我不会费心自己制作 makefile。

相反,我将使用 cmake 生成 makefile 并让他编译我的代码和 SFML。

如果你想这样做,你可以在他们的网站上下载 cmake。

  • https://cmake.org/ 如果您在窗口中,请不要忘记将 cmake 添加到您的路径变量中

然后在你的项目中创建一个名为

的文件
  • CMakeLists.txt
  • 一个 Lib 文件夹,其中有你所有的 lib
  • 拥有所有源文件的源文件夹
  • 编译结果所在的 Build 文件夹

在您的 CMakeLists 中使用 c++11 复制并粘贴 sfml 的代码

cmake_minimum_required(VERSION 3.19)
project(ProjectNAME)

# Source files
set(SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/source")
set(LIB_DIR "${CMAKE_CURRENT_SOURCE_DIR}/lib")

#All the sources files listed
#List only the cpp file, header are automatically listed
set(SOURCES
        "${SRC_DIR}/main.cpp"
        )


# Executable definition and properties
add_executable(${PROJECT_NAME} ${SOURCES})
target_include_directories(${PROJECT_NAME} PRIVATE "${SRC_DIR}")
set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD 11)

# SFML
set(SFML_DIR "${LIB_DIR}/SFML")

# this line is here to avoid having to move the dll into the build folder
set(BUILD_SHARED_LIBS FALSE)


add_subdirectory("${SFML_DIR}")
target_link_libraries(${PROJECT_NAME} sfml-graphics sfml-audio sfml-system sfml-window sfml-network)

不要忘记将 main.cpp 放在源文件夹中,将 SFML 文件夹放在 Lib 文件夹中。 注意正确命名CMakeLists.txt中的所有文件夹

那么如果你在 linux 上使用 gcc 或 g++:

  • 打开你的终端
  • 进入 Build 文件夹
  • 执行命令“cmake ..
  • 等到它完成
  • 执行命令“make
  • 等到它完成
  • 使用“./ProjectNAME”启动您的程序

如果您在带有 mingw 的窗口上(不要忘记在您的路径中添加 mingw):

  • 打开你的终端
  • 进入根目录
  • 执行命令“cmake -G "MinGW Makefiles" -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -B build/Debug -DCMAKE_BUILD_TYPE=Debug
  • 等到它完成
  • 进入构建文件夹
  • 执行命令“mingw32-make -j
  • 等到它完成
  • 使用“ProjectNAME.exe”启动您的程序

而且一切都应该很容易运行,无需自己配置 make 文件。 如果你想了解更多关于 cmake 的信息,他们有很棒的文档

现在您只需包含

【讨论】:

  • 感谢您的回答。我按照您的指示进行操作,但我被困在 cmake 的路径变量中。它没有找到。我在 (C:\cmake) 上下载并添加到我的路径变量系统中,但它无法识别。我尝试了 C:\make 和 C:\make\Source (因为我认为 cmake 在这里)但没有。我再次搜索。
  • 好的,我发现我的 cmake 没有合适的文件。现在,很好。但是,我尝试解决一个错误,我认为它会很好。它说我的 CMakeLists 不在这里。
  • 好的,我在命名文件时放了 CMakeLists.txt。这是一个错误。我只需要编写 CMakeLists。它现在可以编译,但我有最后一个错误:它停止了,因为我的 lib/SFML 文件夹中没有 CMakeLists,我不明白为什么会出现这个错误。你能给我解释一下吗?谢谢。
  • 可以发截图吗。
  • 顺便说一下,为了确保你的lib文件夹中有sfml,你应该从github下载它github.com/SFML/SFML并将它放在lib文件夹中
猜你喜欢
  • 2010-11-12
  • 1970-01-01
  • 2012-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多