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

C++ Dependencies directories between files

我的编译器在搜索目录中的文件时遇到问题。我在 windows 10.

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

我有 9 个文件 .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”中,但我不知道如何指定或操作它。

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

克里斯托夫。

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

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

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

  • https://cmake.org/ 如果你在 window
  • 上,不要忘记将 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

中的所有文件夹

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

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

如果你在 window 上使用 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 的更多信息,他们有很棒的文档

现在您只需包含