diff --git a/CHANGELOG.md b/CHANGELOG.md index 7b38386..37f1e44 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # 更新日志 Change Log +## \[3.1.2\] +*2021.9.10* + +- 添加 CLI 中丢失的 `--compile-arg` 选项; +- CLI 中增加新手模式 `-n`。 + ## \[3.1.1\] *2021.9.9* diff --git a/CMakeLists.txt b/CMakeLists.txt index 7fb5f8e..a48a269 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.18.0) -project(vscch3 VERSION 3.1.1) +project(vscch3 VERSION 3.1.2) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) diff --git a/mac_user_guide.md b/mac_user_guide.md new file mode 100644 index 0000000..c4648f8 --- /dev/null +++ b/mac_user_guide.md @@ -0,0 +1,31 @@ +# VSCodeConfigHelper Mac 用户指南 + +## 下载工具 + +前往[工具主页](https://vscch3.vercel.app)下载此工具;然后,解压它;得到一个 `VSCodeConfigHelper_v3.x.x_mac` 文件夹。 + +[启动终端应用程序](https://support.apple.com/zh-cn/guide/terminal/apd5265185d-f365-44cb-8b09-71a064a42125/mac)。键入 `cd `(cd空格),然后将刚才的文件夹拖入终端内,最后按下回车 return。(即输入了以下命令: +```shell +cd /Users/.../Downloads/VSCodeConfigHelper_v3.x.x_mac +``` +。或者,如果你启用了在文件夹内打开终端的服务,你可以直接在该文件夹下打开终端。) + +## 首次设置 + +在终端中键入 `./vscch` 并按回车。第一次启动时会提示因安全原因无法运行。此时打开苹果图标,定位到“系统偏好设置”-“安全性与隐私”,在“通用”选项卡的下方对 `vscch` 程序点击“仍然允许”。 + +再次尝试启动工具,键入以下命令并按回车: +```shell +./vscch -n -w ~/Desktop/Cpp +``` +注意这里 `-w` 后面是你要配置的工作区文件夹路径,这里使用了 `~/Desktop/Cpp`,即桌面下的 `Cpp` 文件夹。`-n` 选项表明启用新手模式。关于新手模式以及更多选项可通过 `./vscch -h` 查看。 + +> 若使用新手模式,为了更好的体验,建议在终端的菜单栏中定位到“终端”-“偏好设置”-“Shell”,将“当Shell退出时”设置为“关闭窗口”。 + +如果工具显示 `未安装 Xcode Command Line Tools,将进行安装` 的提示,则按照屏幕说明操作。安装 Xcode Command Line Tools 需要几分钟到数十分钟不等。安装完成后,再次执行上述命令来继续配置。 + +## 配置完成 + +工具配置完成后,若为新手模式(或带有 `--open-vscode` 选项),则工具会自动启动 VS Code 并打开工作区文件夹。尝试在该文件夹下编译、运行或调试 C++。 + +**注意** Mac 并不支持内置终端。换而言之,不论是否启用 `--external-console` 进行配置,运行和调试时都会弹出终端窗口。但 `--external-console` 会使用更加美观的暂停脚本。若不使用 `--external-console`,则“当Shell退出时”不能设置为“关闭窗口”:否则运行时无法观察到程序输出结果。 \ No newline at end of file diff --git a/src/cli.cpp b/src/cli.cpp index c043062..82f48c2 100644 --- a/src/cli.cpp +++ b/src/cli.cpp @@ -200,6 +200,7 @@ void init(int argc, char** argv) { ADD_OPTION_C("install-chinese", ShouldInstallL10n, "为 VS Code 安装中文语言包"); ADD_OPTION_C("offline-cpptools", OfflineInstallCCpp, "离线安装 C/C++ 扩展"); ADD_OPTION_C("uninstall-extensions", ShouldUninstallExtensions, "卸载多余的 VS Code 扩展"); + ADD_OPTION_C("compile-arg,a", CompileArgs, "指定编译选项"); // ADD_OPTION_C("generate-test", GenerateTestFile, ""); #ifdef WINDOWS ADD_OPTION_C("apply-nonascii-check", ApplyNonAsciiCheck, @@ -222,12 +223,20 @@ void init(int argc, char** argv) { // other options that cannot be parsed directly std::string languageText; - std::string modeText; + bool newbieMode; // clang-format off configOpt.add_options() ("language", po::value(&languageText)->default_value("c++"), "指定配置目标语言。可为 c++ 或 c") ("generate-test", "强制生成测试文件") ("no-generate-test", "不生成测试文件") + ("newbie-mode,n", po::bool_switch(&newbieMode)->default_value(false), "启用新手模式。这相当于以下选项:" + "--assume-yes --verbose --external-terminal --install-chinese" + " --offline-cpptools --uninstall-extensions --open-vscode" + " -a-Wall -a-Wextra" +#ifdef WINDOWS + " --apply-nonascii-check" +#endif + ) ; // clang-format on @@ -246,10 +255,26 @@ void init(int argc, char** argv) { options.UseGui = true; } #endif + if (newbieMode) { + options.AssumeYes = true; + options.UseExternalTerminal = true; + options.ShouldInstallL10n = true; + options.OfflineInstallCCpp = true; + options.ShouldUninstallExtensions = true; + options.OpenVscodeAfterConfig = true; + options.CompileArgs = {"-Wall", "-Wextra"}; +#ifdef WINDOWS + options.ApplyNonAsciiCheck = true; + if (Native::isGbkCp()) { + options.CompileArgs.emplace_back("-fexec-charset=GBK"); + } +#endif + } preprocessOptions(allOpts); if (parseError) { LOG_ERR("命令行参数存在错误:", *parseError); + std::exit(1); } Native::checkSystemVersion(); diff --git a/src/generator.cpp b/src/generator.cpp index edb5b81..e971372 100644 --- a/src/generator.cpp +++ b/src/generator.cpp @@ -440,7 +440,13 @@ std::string Generator::generateTestFile() { } LOG_INF("正在生成测试文件 ", filepath, "..."); const std::string compileHotkeyComment{ - "按下 "s + (options.UseExternalTerminal ? "F6" : "Ctrl + F5") + " 编译运行。"}; + "按下 "s + (options.UseExternalTerminal ? "F6" : +#ifdef MACOS + "⌃ F5" +#else + "Ctrl + F5" +#endif + ) + " 编译运行。"}; const std::string compileResultComment{"按下 "s + (options.UseExternalTerminal ? "F6 后,您将在弹出的" @@ -460,7 +466,13 @@ std::string Generator::generateTestFile() { oss << '\n'; oss << c(compileHotkeyComment) << '\n'; oss << c("按下 F5 编译调试。") << '\n'; - oss << c("按下 Ctrl + Shift + B 编译,但不运行。") << '\n'; + oss << c("按下 " +#ifdef MACOS + "⌘ ⇧ B" +#else + "Ctrl + Shift + B" +#endif + " 编译,但不运行。") << '\n'; if (isCpp) { oss << R"( #include