VSCode下SDL圖形庫編譯配置,以及一個簡單的排序算法圖形展示


目的

練一下排序算法,同時通過圖形界面直觀的展示排序過程,包含十中排序算法。

記得原來網上也有過類似的作品。自己這里重新實現一遍,用的c++和SDL做圖形展示。

最終效果:

歸並排序

SDL配置

通過visual studio編譯SDL工程有不少教程,不過使用vscode我還是花了不少時間才配成功。

這里我用了SDL做圖形展示,SDL_ttf做文字展示。

編譯環境用的mingw

三方庫下載

SDL的地址在這里,注意Runtime和Development兩種庫都要下載,Runtime用於運行的時候,而Development在編譯鏈接時需要使用。

注意Development庫需要對應解壓相應編譯器的庫(我這里是x86_64-w64-mingw32)

SDL_ttf的地址在這里,同樣也是需要Runtime和Development兩種庫。

vs code配置

這塊費了不少時間,直接粘貼我可以使用的結果。

c/c++源代碼配置

通過vs code功能(F1)中的c/c++: Edit Configurations(UI),可以在.vscode文件夾中,生成c_cpp_properties.json文件。

比較重要的地方我加了注釋:

c_cpp_properties.json:

{
    "configurations": [
        {
            "name": "GCC",
            "includePath": [
                "${workspaceFolder}/**",
                  //以下兩項分別是解壓后的SDL和SDL_TTF頭文件地址,源代碼應用sdf.h和sdl_ttf.h時,需要增加這個配置
                  //vscode才能補全
                "C:\\work\\software\\SDL2-2.0.14-win32-x64\\x86_64-w64-mingw32\\include\\SDL2",
                "C:\\work\\software\\SDL2-2.0.14-win32-x64\\SDL_TTF"
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE"
            ],
            "windowsSdkVersion": "10.0.17763.0",
            //"compilerPath": "C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC/Tools/MSVC/14.16.27023/bin/Hostx64/x64/cl.exe",
            //這里替換了默認的msvc,采用了mingw的g++編譯
            "compilerPath": "C:/Program Files/mingw-w64/x86_64-8.1.0-posix-seh-rt_v6-rev0/mingw64/bin/g++.exe",
            "cStandard": "c11",
            "cppStandard": "c++11",
            "intelliSenseMode": "gcc-x64"
        }
    ],
    "version": 4
}

編譯配置

有的教程提到通過vs code功能中的Edit Default Build Task生成基礎g++配置task.json,再在文件基礎上修改,不過我的vs code版本選擇這個功能后,並不能選擇g++,於是我直接創建了task.json, 內容如下,關鍵內容有注釋.

task.json:

{
    "version": "2.0.0",
    "tasks": [
      {
        "type": "shell",
        //注意這里的label,后面配置launch運行任務時,需要制定前置的build任務名稱,就是這個參數
        "label": "C/C++: g++.exe build active file",
         //對應Mingw的g++命令,注意需要先將mingw的bin目錄加入到系統的PATH中
        "command": "g++",
        //關鍵的地方
        "args": [
            "-g", 
            //這里根據項目需求修改,是編譯的源文件
            "src\\*.cpp", 
             //-I包含頭文件路徑,這里就是和上面c_cpp_properties.json相同,是SDL和SDL_TTF的解壓縮位置
            "-IC:\\work\\software\\SDL2-2.0.14-win32-x64\\x86_64-w64-mingw32\\include\\SDL2",
            "-IC:\\work\\software\\SDL2-2.0.14-win32-x64\\SDL_TTF",
            //SDL相關庫的lib路徑,根據自己的情況修改
            "-LC:\\work\\software\\SDL2-2.0.14-win32-x64\\x86_64-w64-mingw32\\lib",
            "-LC:\\work\\software\\SDL2-2.0.14-win32-x64\\SDL_TTF",
            "-lmingw32",
            //之前碰到找不到Win_Main的問題,加上-lSDL2main和-mwindows以后就好了
            "-lSDL2main",
            "-lSDL2",
            "-lSDL2_ttf",
            "-mwindows",
            "-o", 
            //生成的可執行程序路徑,我這里放在了build目錄下
            "build\\main.exe"
        ],
        "options": {
          "cwd": "${workspaceFolder}"
        },
        "problemMatcher": ["$gcc"],
        "group": {
          "kind": "build",
          "isDefault": true
        }
      }
    ]
  }

運行配置

運行配置是launch.json,這里配置的是通過gdb調試運行。

需要注意由於SDL依賴運行庫,也就是前面提到的Runtime庫,SDL和SDL_ttf共需要SDL2,SDL2_ttf,zlib1,libfreetype-6這幾個庫,如果不用SDL_ttf的文字顯示功能,那么只要SDL2一個庫就行了,都是在之前的下載鏈接有的。

launch.json:

{
    "version": "0.2.0",
    "configurations": [
      {
        "name": "g++.exe - Build and debug active file",
        "type": "cppdbg",
        "request": "launch",
        //調試的程序,由於之前我編譯生成在build目錄下,這里也相應的用build目錄
        "program": "${workspaceFolder}\\build\\main.exe",
        "args": [],
        "stopAtEntry": false,
        //運行目錄,由於我們需要運行時的dll庫,運行時的dll也要放在這個目錄中,否則會找不到(比如找不到SDL2.dll)
        "cwd": "${workspaceFolder}\\build",
        "environment": [],
        "externalConsole": false,
        "MIMode": "gdb",
        //mingw 的gdb路徑
        "miDebuggerPath": "C:\\Program Files\\mingw-w64\\x86_64-8.1.0-posix-seh-rt_v6-rev0\\mingw64\\bin\\gdb.exe",
        "setupCommands": [
          {
            "description": "Enable pretty-printing for gdb",
            "text": "-enable-pretty-printing",
            "ignoreFailures": true
          }
        ],
        //前面task.json中的label
        "preLaunchTask": "C/C++: g++.exe build active file"
      }
    ]
  }

運行

然后執行vs code中的Tasks: Run Build Task就能執行task.json中對應的編譯任務,生成main.exe了。

我的算法圖形化小程序

工程地址在https://github.com/mosakashaka/visual_sort,下載下來的build目錄中的main.exe可以直接執行。

效果如下:

入口界面,通過按鍵選擇運行的排序:

入口界面

冒泡:

冒泡排序

快排
快速排序

還有其他的不一一截圖了。



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM