![](/img/trans.png)
[英]On creation of a new file it shows “<SFML/Graphics.hpp> no such file or directory”
[英]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-window
、 sfml-system
和sfml-graphics
,從你的代碼來看,它們是你現在唯一需要的。 請注意,在運行之前,必須將動態庫復制到可執行文件夾(或系統動態加載器能夠找到它們的任何其他位置)。
您可以通過Ctrl-Shift-P -> Tasks: Run Task -> Compile SFML executable
,然后在 VS Code 之外運行生成的可執行文件。 或者,您可以在 VS Code 中使用F5
或Ctrl-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.