簡體   English   中英

在 VSCode“SFML/Graphics.hpp 沒有這樣的文件或目錄”gcc 中包含 SFML 庫

[英]include SFML Library in VSCode "SFML/Graphics.hpp no such file or directory" gcc

我已經看到與此相關的其他問題,如果不是全部的話,我能找到的大多數問題都有一些關於讓 SFML 在 VSCode 中編譯和運行的方法我希望有一種方法可以簡單地將 SFML/include 目錄附加到編譯器包含這個與 intelliSense 代碼完成一起使用的工作,並且它正確地知道 SFML 庫的位置。 智能感知屏幕截圖。 (您在屏幕截圖中看到的額外錯誤會在文件保存后消失)。 所以最終我想知道或得到幫助的是讓 SFML 庫編譯和運行,而不需要來自 GitHub 的樣板,這似乎是常用的,謝謝。

主文件

#include <SFML/Graphics.hpp>

int main()
{
    float windowHeight = 400;
    float windowWidth = 400;

    sf::RenderWindow window(sf::VideoMode(windowWidth, windowHeight), "Rougelike");

    sf::Texture texture;
    if (!texture.loadFromFile("res/player-sprite.png"))
        return 0;
    sf::Sprite sprite;
    sprite.setTexture(texture);

    while (window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
            {
                window.close();
            }
        }

        window.clear();
        window.draw(sprite);
        window.display();
    }
}

這是我的 c_cpp_properties.json。

{
    "configurations": [
        {
            "name": "Win32",
            "includePath": [
                "${default}",
                "A:/SFML-2.5.1/include/**"
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE"
            ],
            "windowsSdkVersion": "10.0.19041.0",
            "compilerPath": "A:/mingw32/bin/g++.exe",
            "cStandard": "c17",
            "cppStandard": "c++17",
            "intelliSenseMode": "windows-gcc-x86",
            "compilerArgs": ["-I A:/SFML-2.5.1/include/**"]
        }
    ],
    "version": 4
}

在 VS Code 中, c_cpp_properties.json指定編輯器本身使用的參數(如編譯器路徑、C++ 標准、包含用於 IntelliSense 目的的目錄;請參閱此處的文檔),但不指定構建任務 - 這是tasks.json的工作。 在您的.vscode文件夾中,創建tasks.json文件,如下所示:

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Compile SFML executable",
            "type": "cppbuild",
            "command": "g++",
            "args": [
                "-o",
                "${workspaceFolder}/main.exe",
                "-IA:/SFML-2.5.1/include/",
                "-LA:/SFML-2.5.1/lib/",
                "${workspaceFolder}/main.cpp",
                "-lsfml-graphics",
                "-lsfml-window",
                "-lsfml-system"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
        }
    ]
}

在這里,我們創建了一個名為“編譯 SFML 可執行文件”的新任務 此任務將main.cpp編譯為main.exe ,同時為g++提供有關 SFML 的所有必要信息:包含目錄( -I標志)、庫目錄( -L )和用於鏈接器輸入的主 SFML 庫本身。 具體來說, -l{library_name}鏈接lib{library_name}.a ,在我們的例子中,它是引用動態庫{library_name}-2.dll的存根的導入庫(此名稱在導入庫中編碼),可以是在A:/SFML-2.5.1/include/bin/文件夾中找到(假設您安裝了 MinGW 版本的 SFML 庫,因為您使用的是 MinGW G++ 編譯器,所以您應該擁有它)。 {library_name}這里指的是sfml-windowsfml-systemsfml-graphics ,從你的代碼來看,它們是你現在唯一需要的。 請注意,在運行之前,必須將動態庫復制到可執行文件夾(或系統動態加載器能夠找到它們的任何其他位置)。

您可以通過Ctrl-Shift-P -> Tasks: Run Task -> Compile SFML executable ,然后在 VS Code 之外運行生成的可執行文件。 或者,您可以在 VS Code 中使用F5Ctrl-F5分別運行帶或不帶調試的可執行文件,其中可執行文件將在運行之前根據默認啟動配置的preLaunchTask ,默認情況下設置為我們的任務(因為"isDefault": true )。

另請注意,如果要進行調試構建/運行,則應鏈接到{library_name}-d而不是{library_name} (並將{library_name}-d-2.dll到可執行文件夾中以運行)。 使用適當的-l{library_name}-d標志創建單獨的任務(如“編譯 SFML 可執行調試”)可能對此很有用。 然后,您可以通過從兩個配置中刪除"isDefault": true並使用Ctrl-Shift-P -> C/C++: {Debug / Run} C/C++ File並使用適當preLaunchTask選擇啟動配置來選擇要在運行之前執行的構建任務從列表中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM