https://github.com/zxffffffff/start-cpp-vcpkg-template
一个 C++ 跨平台脚手架项目,使用 vcpkg + cmake 搭建
https://github.com/zxffffffff/start-cpp-vcpkg-template
cmake cpp cross-platform starter template vcpkg
Last synced: 2 months ago
JSON representation
一个 C++ 跨平台脚手架项目,使用 vcpkg + cmake 搭建
- Host: GitHub
- URL: https://github.com/zxffffffff/start-cpp-vcpkg-template
- Owner: zxffffffff
- License: mit
- Created: 2024-10-30T08:12:43.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-01-12T06:02:35.000Z (over 1 year ago)
- Last Synced: 2025-01-12T06:25:51.675Z (over 1 year ago)
- Topics: cmake, cpp, cross-platform, starter, template, vcpkg
- Language: C++
- Homepage:
- Size: 91.8 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# start-cpp-vcpkg-template



更多信息: [start-cpp-vcpkg](https://github.com/zxffffffff/start-cpp-vcpkg)
## 温馨提示
- 可以使用环境变量 VCPKG_ROOT、VCPKG_DOWNLOADS 指定安装、下载目录,也可以每个项目自带一个 vcpkg 子模块
- 下载时网络不是很稳定,经常失败需要反复手动下载,建议仅开源项目和小型项目使用
- 叫得出名字的库基本都支持,如果 vcpkg search 没有那就真没有了
## 一个 C++ 跨平台脚手架项目,使用 vcpkg + cmake 搭建
- `gflags`: Google 命令行标志库。
- `glog`: Google 日志库。
- `nlohmann-json`: 现代的 JSON 解析/生成器,语法糖非常方便。
- `tinyxml`: 轻量的 XML 解析库。
- `fmt`: 格式化库,实现 C++20 std::format,完美取代 iostreams 和 printf。
- `gtest`: Google 测试框架。
## 快速开始
- 运行 `build-xxx` 在线安装第三方库,需要能够访问外网 (github)
- 网络异常导致的错误,可以尝试重新运行脚本(下载较多,可能需要反复重试)
- 跨平台项目建议使用 静态库 (Linux默认静态编译,动态链接系统库)
- 跨平台项目建议使用 UTF-8 编码格式,这样仅需设置 Windows 编译环境 (Windows 中文系统默认使用 GBK 编码)
- 跨平台项目建议使用 `.gitattributes` 确保提交时转换为 `LF`
### CMake CXX_STANDARD 版本参考
| Added in version | C++ Standard |
| ----------------- | --------------- |
| 3.1 | C++ 98, 11, 14 |
| 3.8 | C++ 17 |
| 3.12 | C++ 20 |
| 3.20 | C++ 23 |
| 3.25 | C++ 26 |
### Windows MSVC 参考
| CMake version | MSVC version |
| --------------------- | --------------- |
| Visual Studio 17 2022 | v143 |
| Visual Studio 16 2019 | v142 |
| Visual Studio 15 2017 | v141 |
| Visual Studio 14 2015 | v140 |
| Visual Studio 12 2013 | 不保证二进制兼容性 |
### Apple C++ 版本参考
| C++ Feature | Minimum deployment target |
| ------------------ | --------------------------------------------- |
| C++ 17 Filesystem | macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0 |
### Linux Glibc 版本参考
| Glibc | Ubuntu | CentOS | Debian |
| ----- | ------------------ | -------------- | --------------- |
| 2.35 | 22.04 (GCC 11.2.0) | | |
| 2.34 | | 9 (GCC 11.2.1) | |
| 2.31 | 20.04 (GCC 9.3.0) | | 11 (GCC 10.2.1) |
| 2.28 | | 8 (GCC 8.3.1) | 10 (GCC 8.3.0) |
| 2.27 | 18.04 (GCC 7.3.0) | | |
| 2.24 | | | 9 (GCC 6.3.0) |
| 2.23 | 16.04 (GCC 5.4.0) | | |
| 2.19 | 14.04 (GCC 4.8.2) | | 8 (GCC 4.9.2) |
| 2.17 | | 7 (GCC 4.8.5) | |
| 2.15 | 12.04 (GCC 4.6.3) | | |
| 2.13 | | | 7 (GCC 4.7.2) |
| 2.12 | | 6 (GCC 4.4.7) | |
## 注意事项
### vcpkg 指定编译器(降级)
- 除了使用 `cmake -G` 之外,还需要在 `vcpkg/triplets/xxx.cmake` 指定编译器,否则默认使用已安装的最新版本
- 手动修改 triplets 配置,例如设置 MSVC 版本 `set(VCPKG_PLATFORM_TOOLSET v140)`
### vcpkg 指定版本号(降级)
- 必须使用 `git clone` 或 `submodule` 引入 vcpkg,`subtree` 会报错找不到 `.git` 文件
- 查看历史版本:`git blame -l versions/l-/libuv.json`
- 自动添加baseline:`vcpkg x-update-baseline --add-initial-baseline`
```js
// libuv 1.41 是最后一个支持 win7 的版本
"overrides": [
{
"name": "libuv",
"version": "1.41.0",
"port-version": 1
}
],
"builtin-baseline": "b051745c68faa6f65c493371d564c4eb8af34dad"
```
## Vcpkg
- 安装 `vcpkg` 参考本工程 `CMakeLists.txt`
- 手动安装建议使用 `git clone https://github.com/microsoft/vcpkg.git`
- 推荐使用环境变量 VCPKG_ROOT、VCPKG_DOWNLOADS 避免重复下载编译
### 参考
-
-
### 查询 & 添加 & 查看
```Bash
.\vcpkg\vcpkg.exe search xxx
.\vcpkg\vcpkg.exe install xxx` or `vcpkg.json
.\vcpkg\packages\xxx\CONTROL
```
## License
选择合适的开源协议,例如 `MIT License`
