vscode CMake vcpkg 配置SDL2和spdlog踩的亿些坑

vscode CMake vcpkg 配置SDL2和spdlog踩的亿些坑

配置过程,讲讲Windows,Linux就方便多了用系统的包管理器直接装就行

vcpkg

先照着GitHub上vcpkg的官方教程安装vcpkg,再打开vscode,Ctrl + Shift + P 输入 setting.json 打开用户配置,加一条

1
2
3
4
5
6
7
8
9
10
"cmake.configureSettings": {
/*指定vcpkg路径*/
"CMAKE_TOOLCHAIN_FILE": "{你的vcpkg安装路径}/scripts/buildsystems/vcpkg.cmake",
/*
指定要使用的包版本,这个和编译器有关
如果你用的是MSVC就改成 `x64-windows`
Clang不清楚,具体可以看vcpkg的文档
*/
"VCPKG_TARGET_TRIPLET": "x64-mingw-static"
}

(你一定装了CMake插件了吧

vscode小技巧

比如我不想让 cmake.configureSettings 同步就可以写

1
2
3
"settingsSync.ignoredSettings":{
"cmake.configureSettings"
}

装SDL2

终端输入

vcpkg install SDL2:x64-mingw-static

前提是你设置了vcpkg的环境变量

这里可以根据你需要的配置写

装好之后vcpkg会提示CMake的配置

但是很可惜,光有这个是不能用的。正确的配置是

1
2
3
4
5
6
7
8
9
find_package(SDL2 CONFIG REQUIRED)

target_link_libraries(
${PROJECT_NAME}
PRIVATE
${SDL2_LIBRARIES}
SDL2::SDL2main
SDL2::SDL2
)

这里需要显式引入SDL2的库。

spdlog的话直接用vcpkg给的配置就可以了。

p.s.

如果你碰到什么线程之类的编译错误,需要装个posix的MinGW

之前用的官方的办法直接 include(sdl2-config.cmake),后面试了git子模块的办法和vcpkg两种办法引入了spdlog库,结果CMake和gcc编译没有任何报错,但是控制台都不能输出log

后来在互联网的一个小角落找到了vcpkg无法引入SDL2的解决办法,引入了之后莫名其妙解决了上面的问题。

也许这就是传说中的 Windows Magic 吧 (~ ̄▽ ̄)~

如果你用clangd作为vscode的lsp(老色批)Windows下就可能会发现提示找不到 strings.h

直接跳转到对应的SDL2 #include <strings.h> 直接注释掉即可

下面全部作废:

clangd找不到你编译器的库,这里需要手动告诉它。

在vscode的设置里面找到clangd,在Argument项目里面写上 --include-dir={你的mingw位置}/x86_64-w64-mingw32/include

鼠标放到Argument上面点出现的小齿轮可以设置这项是否同步

重启就修复了

p.s.讲讲这个问题解决的过程

最开始找到说要在 Fallback Flags 加 -I{路径}

这个I试过小写l和大写I结果都不行

最后还是在官方文档找到了这一行

List of flags to remove from the compile command.

  • If the value is a recognized clang flag (like -I) then it will be removed along with any arguments. Synonyms like --include-dir= will also be removed.

虽然看不懂,但是反正试试,结果成功了

还得看官方文档~


vscode CMake vcpkg 配置SDL2和spdlog踩的亿些坑
https://catfootbeats.github.io/2022/12/30/vscode-CMake-vcpkg-配置SDL2和spdlog踩的亿些坑/
作者
Catfootbeats
发布于
2022年12月30日
许可协议