Thêm include và libraries của SDL cho c++ project trong VSCode

Em vừa chuyển sang dùng VSCode, và đang muốn thêm include và libraries của SDL nhưng loay hoay mãi không được. Khi viết #include <SDL.h> thì nó thông báo như sau:

lỗi vscode

Em dùng Code Runner để run code và c/c++ project generator để tạo project ạ.
Em cũng đã cài đặt để chạy được code trong một project, nhưng lại không biết thêm include và libraries của bên thứ ba như nào.

Em đã thêm folder include vào c_cpp_properties.json:

{
    "configurations": [
        {
            "name": "Win32",
            "includePath": [
                "D:\\SDL\\include",
                "${workspaceFolder}/**"
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE"
            ],
            "compilerPath": "C:\\Program Files\\CodeBlocks\\MinGW\\bin\\gcc.exe",
            "cStandard": "gnu17",
            "cppStandard": "gnu++14",
            "intelliSenseMode": "windows-gcc-x64"
        }
    ],
    "version": 4
}

và cũng đã thêm include và lib vào task.json :

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "build",
            "type": "shell",
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "windows": {
                "command": "powershell",
                "args": [
                    "-c",
                    "-ID:\\SDL\\include",
                    "-LD:\\SDL\\lib",
                    "-lmingw32", "-lSDL2main", "-lSDL2", "-lSDL2_image", "-lSDL2_mixer", "-lSDL2_ttf",
                    "mingw32-make"
                ]
            },
            "linux": {
                "command": "bash",
                "args": [
                    "-c",
                    "make"
                ]
            },
            "osx": {
                "command": "bash",
                "args": [
                    "-c",
                    "make"
                ]
            }
        },
        {
            "label": "build & run",
            "type": "shell",
            "windows": {
                "command": "powershell",
                "args": [
                    "-c",
                    "'mingw32-make run'"
                ]
            },
            "linux": {
                "command": "bash",
                "args": [
                    "-c",
                    "'make run'"
                ]
            },
            "osx": {
                "command": "bash",
                "args": [
                    "-c",
                    "'make run'"
                ]
            }
        },
        {
            "label": "clean",
            "type": "shell",
            "windows": {
                "command": "powershell",
                "args": [
                    "-c",
                    "'mingw32-make clean'"
                ]
            },
            "linux": {
                "command": "bash",
                "args": [
                    "-c",
                    "'make clean'"
                ]
            },
            "osx": {
                "command": "bash",
                "args": [
                    "-c",
                    "'make clean'"
                ]
            }
        }
    ]
}

Em chả biết phải làm như thế nào nữa, mọi người giúp em với :frowning: . Em cảm ơn ạ.

em install VS Community, git, cmake rồi clone vcpkg về xài đi, xài VS Code làm gì :V

1. Install VS Community

2. Install các tools cần thiết

2.1 Git

trong lúc chờ đợi install VS Community thì em install thêm git, lúc install có option này là được, các options khác sao cũng được :V
image

2.2 CMake

cmake (mình chọn cmake-...-windows-x86_64.msi), nhớ chọn option thêm cmake vào PATH, all users hay current user cũng được:
image

2.3 Vcpkg

2.3.1 Clone và bootstrap vcpkg

rồi mở command line (cmd.exe) lên clone vcpkg về, để ở ổ nào có nhiều dung lượng tí :V ví dụ ổ D:

cd /D D:
git clone https://github.com/Microsoft/vcpkg
cd vcpkg
bootstrap-vcpkg.bat

2.3.2 Thêm Environment Variables cho vcpkg

rồi thêm vào User environment variables: bấm Start menu, gõ “environment” nó ra “Edit the system environment variables” thì bấm vào đó
image
bấm vào “Environment Variables…”
image
bấm vào nút “New…” ở phía trên (thuộc phần User variables)
thêm vào 2 biến:
VCPKG_DEFAULT_TRIPLET giá trị x64-windows

VCPKG_DEFAULT_BINARY_CACHE giá trị ví dụ ở đây là D:\vcpkg\archives


3. Tạo project

tạo project mới, bằng tay :V

3.1 Cấu trúc của một project

tạo thư mục ví dụ là “sdl-vcpkg-init” có cấu trúc như sau:

sdl-vcpkg-init
├── CMakeLists.txt
├── src
│   └── main.cpp
└── vcpkg.json

image

tức là chỉ có 3 file text: file main.cpp ở trong thư mục src, file CMakeLists.txt và file vcpkg.json.

nội dung của CMakeLists.txt là

cmake_minimum_required(VERSION 3.20 FATAL_ERROR)

project(sdl-vcpkg-init CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

add_executable(${PROJECT_NAME} src/main.cpp)

# Set the startup project for the "play" button in MSVC
set_property(DIRECTORY PROPERTY VS_STARTUP_PROJECT ${PROJECT_NAME})

nội dung của vcpkg.json là

{
  "name": "sdl-vcpkg-init",
  "version": "0.0.1",
  "dependencies": [
    "sdl2",
    "sdl2-image",
    "sdl2-mixer",
    "sdl2-ttf"
  ]
}

3.2 Generate build files bằng CMake

chờ install xong VS Community rồi thì mới làm bước tiếp theo:
bấm vào Start menu, gõ “developer comm”, bấm vào
image

cd tới thư mục “sdl-vcpkg-init” vừa tạo, ví dụ cd /D D:/prog/sdl-vcpkg-init, tạo thư mục “build” rồi cd vào đó mkdir build && cd build, rồi gõ command

cmake .. -G"Visual Studio 17 2022" -A x64 "-DCMAKE_TOOLCHAIN_FILE=D:/vcpkg/scripts/buildsystems/vcpkg.cmake"

-DCMAKE_TOOLCHAIN_FILE=D:/vcpkg/scripts/buildsystems/vcpkg.cmake" ở đây ví dụ thư mục vcpkg clone hồi nãy là “D:/vcpkg”, nếu install chỗ khác thì sửa lại cho đúng thư mục nha :V

3.3 Link các thư viện được vcpkg installed

nếu install đúng hết thì nó sẽ ra dòng -- Running vcpkg install trước, và sau cùng là -- Generating done. Khi vcpkg install xong thì nó sẽ in ra mấy dòng:

The package sdl2 provides CMake targets:

    find_package(SDL2 CONFIG REQUIRED)
    target_link_libraries(main PRIVATE SDL2::SDL2 SDL2::SDL2main)

The package sdl2-image provides CMake targets:

    find_package(sdl2-image CONFIG REQUIRED)
    target_link_libraries(main PRIVATE SDL2::SDL2_image)

The package sdl2-mixer provides CMake targets:

    find_package(sdl2-mixer CONFIG REQUIRED)
    target_link_libraries(main PRIVATE SDL2::SDL2_mixer)

The package sdl2-ttf provides CMake targets:

    find_package(sdl2-ttf CONFIG REQUIRED)
    target_link_libraries(main PRIVATE SDL2::SDL2_ttf)

bưng mấy dòng này vào CMakeLists.txt:

cmake_minimum_required(VERSION 3.20 FATAL_ERROR)

project(sdl-vcpkg-init CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

find_package(SDL2 CONFIG REQUIRED)
find_package(sdl2-image CONFIG REQUIRED)
find_package(sdl2-mixer CONFIG REQUIRED)
find_package(sdl2-ttf CONFIG REQUIRED)

add_executable(${PROJECT_NAME} src/main.cpp)

target_link_libraries(${PROJECT_NAME}
  PRIVATE
    SDL2::SDL2 SDL2::SDL2main
    SDL2::SDL2_image
    SDL2::SDL2_mixer
    SDL2::SDL2_ttf
)

# Set the startup project for the "play" button in MSVC
set_property(DIRECTORY PROPERTY VS_STARTUP_PROJECT ${PROJECT_NAME})

thêm 4 dòng find_package và “1” dòng target_link_libraries

thư mục “build” sẽ gồm các file sau, bấm vào “sdl-vcpkg-init.sln” chạy VS lên là xong
image

3.4 Mở rộng project với CMake và vcpkg

sau này muốn thêm file nào thì tạo file đó ở thư mục “src”, ví dụ “file1.h”, “file1.cpp”, “file2.cpp”, “file3.h” rồi thêm vào project bằng cách sửa dòng add_executable ở CMakeLists.txt là được:

add_executable(${PROJECT_NAME}
  src/main.cpp
  src/file1.h
  src/file1.cpp
  src/file2.cpp
  src/file3.h
)

muốn thêm thư viện nào khác thì rất dễ: thêm tên thư viện đó vào vcpkg.json, ví dụ sdl2-gfx thì thêm vào ở dòng "dependencies":

  "dependencies": [
    "sdl2",
    "sdl2-image",
    "sdl2-mixer",
    "sdl2-ttf",
    "sdl2-gfx"
  ]

rồi bấm build ở VS :V tìm xem nó báo CMake targets gì

1>The package sdl2-gfx provides CMake targets:
1>
1>    find_package(sdl2-gfx CONFIG REQUIRED)
1>    target_link_libraries(main PRIVATE SDL2::SDL2_gfx)

thì bưng mấy dòng này vào CMakeLists.txt là xong:

...
find_package(sdl2-ttf CONFIG REQUIRED)
find_package(sdl2-gfx CONFIG REQUIRED) # thêm dòng này
...
target_link_libraries(${PROJECT_NAME}
  PRIVATE
    SDL2::SDL2 SDL2::SDL2main
    SDL2::SDL2_image
    SDL2::SDL2_mixer
    SDL2::SDL2_ttf
    SDL2::SDL2_gfx # và dòng này
)

hơi nhiều tí nhưng tạo được project thế này thì 1910 thư viện C++ xài được tuốt hết :V

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?