不想当将军的士兵不是好士兵,不能管理项目的编辑器不是好编辑器!Sublime 作为一款优秀的编辑器,其项目管理功能自然也不能弱,管理和编译项目自然不在话下。
然而令我感到奇怪的是,我在网上浏览了 N 多 Sublime 技术帖,发现几乎全是在谈论编辑技巧、插件、皮肤等等,对于至关重要的项目管理功能却鲜有人提及,今天在下就尽绵薄之力科普一下这部分内容。
如果你符合以下情况之一,那么建议你阅读这篇文章:
- 只用 Sublime 编辑过单文件,并没有体验过项目管理功能;
- 用过 Sublime 的项目管理功能,但也仅限于把文件夹拖到左边栏中;
- 经常使用 Sublime 编写代码,但一遇到编译、运行等问题就头疼,只能切回到 IDE 上去。
本文以 编译和运行一个简单的 C++ helloworld 项目 为例来介绍 Sublime 的项目管理功能。
1. 准备:创建项目目录
-
在桌面上新建一个空目录
hello
,然后进入目录并新建 3 个文件:hello.h
,hello.cpp
,main.cpp
,内容分别如下:/* ---------- hello.h ---------- */ void hello(); /* ---------- hello.cpp ---------- */ #include <iostream> #include "hello.h" void hello(){ std::cout<<"hello world"<<std::endl; } /* ---------- main.cpp ---------- */ #include "hello.h" int main() { hello(); return 0; }
这是一个头文件与Cpp文件分离的最简单的 C++ 项目,也就是我们的项目目录了。
打开 Sublime Text,选择菜单
Project->New Workspace for Project
,创建一个全新的 Sublime 窗口(也可以使用快捷键Ctrl+Shift+N
)-
将
hello
目录拖进 Sublime 窗口,这时hello
目录将立即显示在 Sublime 的左侧边栏中。如果不显示,请选择菜单View->Side Bar->Show Side Bar
调出 Side Bar(也可以快捷键 ctrl+k,ctrl+b)。效果如图所示:
2. 创建 Sublime 项目
按
Ctrl+Shift+P
打开命令面板,输入projsave
,回车保存项目,命名为hello
,保存在项目目录即可-
OK,创建项目就是这么简单
3. 项目管理--小试牛刀
-
按
Ctrl+Shift+P
打开命令面板,输入projedit
并回车,进入项目管理文件(其实就是刚才创建的hello.sublime-project
文件)。会看到如下内容:{ "folders": [ { "path": "." } ] }
其中的
"path": "."
是当前项目目录的相对本文件的路径。 -
我们在
"path": "."
之后追加一行内容:"name": "我的第一个C++项目",
,保存,会发现左侧栏的目录名变了,如下图:如果保存弹出错误,请确保你在
"path":"."
的末尾写了英文逗号。
目录名称变成中文只是为了方便观看,实际目录名称仍然是hello
,你可以去桌面检查一下。 -
现在你看到目录里面有个
hello.sublime-project
,这跟我们的代码文件无关,我们不希望看到它,但又不能删除,否则项目就没了,怎么办呢?请接着刚才的行后面再追加一行:"file_exclude_patterns": ["*.sublime-project"],
,保存后hello.sublime-project
立即消失,世界清净了。但不用担心,它只是隐藏了而已,打开
hello
目录还能找到它。到现在为止,我们的项目管理文件是这样的:{ "folders": [ { "path": ".", "name": "我的第一个C++项目", "file_exclude_patterns": ["*.sublime-project"], } ] }
"file_exclude_patterns"
用于排除不想看到的文件,可想而知还会有"file_include_patterns"
用于指定想看到的文件,更多详细信息可点击查看文末链接。
4. 编译和运行项目
编译和运行项目算是项目管理的重头戏了,这里需要用到 Sublime 的 build system。很多人用 Sublime 编译和运行过单个文件,甚至能够自己创建 build system,但编译项目略有不同。
项目可以像单文件一样创建 build system 吗?理论上可以,但我们一般不这样做,因为每个项目都有自己的上下文环境,所以很难写出一个对每个项目都适用的 build system。我们倾向于在项目管理文件中为每个项目分别创建 build system。
编译项目之前,我们首先在
hello
目录下新建一个build
目录,存放编译后的二进制文件。这一步并非必要,但是为了规范化建议采用。-
我们在项目的
"folders":[]
字段后加上一个"build_systems"
字段,创建一个 build systemC++ Project
。当前项目管理文件完整内容如下:{ "folders": [ { "path": ".", "name": "我的第一个C++项目", "file_exclude_patterns": ["*.sublime-project"], } ], "build_systems": [ { "name": "C++ Project", "shell_cmd": "g++ hello.h hello.cpp main.cpp -o .\\build\\main.exe && .\\build\\main.exe", "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$", "working_dir": "$folder" } ] }
这里需要注意的是:想要编译 C++ 代码,你需要先安装一款编译器。推荐使用免费的 gcc ,搜索安装 MinGW-win 即可。
想要了解上述每个字段的具体含义,可以参考文末链接。
-
现在,你在项目的任意一个文件中按下快捷键
Ctrl+B
,都会看到我们刚刚创建的C++ Project
这个 build system,如下图: -
选择我们创建的
C++ Project
并回车,会看到程序编译并正确执行,运行结果自动在下方弹出:
5. 项目的进一步定制
到此为止,关于项目的基本功能已经全部介绍了,还有以下几点需要提示:
- 当你需要新建另一个项目的时候,一定要先
Ctrl+Shift+N
创建一个全新窗口,否则所有拖进来的目录都会更改当前项目。 - 每个项目可以包含多个目录,但最好只有一个代码目录,否则你在不同目录下运行 build 命令可能会产生混淆。
好了,最后一步优化:我们不需要看到build
目录,因为它里面都是二进制文件。我们将build
目录加入排除目录中:"folder_exclude_patterns": ["build"],
。时刻保持代码目录干净整洁有利于提高我们的工作效率。
最后,完整的项目配置文件hello.sublime-project
如下:
{
"folders":
[
{
"path": ".",
"name": "我的第一个C++项目",
"file_exclude_patterns": ["*.sublime-project"],
"folder_exclude_patterns": ["build"],
}
],
"build_systems":
[
{
"name": "C++ Project",
"shell_cmd": "g++ hello.h hello.cpp main.cpp -o .\\build\\main.exe && .\\build\\main.exe",
"file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
"working_dir": "$folder"
}
]
}