Sublime深度定制:编译和运行 C/C++/Java 项目

不想当将军的士兵不是好士兵,不能管理项目的编辑器不是好编辑器!Sublime 作为一款优秀的编辑器,其项目管理功能自然也不能弱,管理和编译项目自然不在话下。

然而令我感到奇怪的是,我在网上浏览了 N 多 Sublime 技术帖,发现几乎全是在谈论编辑技巧、插件、皮肤等等,对于至关重要的项目管理功能却鲜有人提及,今天在下就尽绵薄之力科普一下这部分内容。

如果你符合以下情况之一,那么建议你阅读这篇文章:

  1. 只用 Sublime 编辑过单文件,并没有体验过项目管理功能;
  2. 用过 Sublime 的项目管理功能,但也仅限于把文件夹拖到左边栏中;
  3. 经常使用 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 system C++ 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
  • 选择我们创建的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"
        }
    ]
}

6. 阅读官方帮助文档

7. 相关话题

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345

推荐阅读更多精彩内容