C++ 文件之间的依赖目录

问题描述 投票:0回答:1

我的编译器在搜索目录中的文件时出现问题。我使用的是 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
  • 图形.hpp
  • 主.hpp
  • 网络.hpp
  • OpenGL.hpp
  • 系统.hpp
  • 窗口.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”内,但我不知道如何指定它或操作它。

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

c++ compiler-errors directory dependencies
1个回答
0
投票

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

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

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

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

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

的文件
  • CMakeLists.txt
  • 一个 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中的所有文件夹

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

  • 打开你的终端
  • 进入构建文件夹
  • 执行命令“
    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 的更多信息,他们有很棒的文档

现在您只需包含

© www.soinside.com 2019 - 2024. All rights reserved.