美文网首页Sublime TextC++
Sublime深度定制:编译和运行 C/C++/Java 项目

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

作者: Henry606 | 来源:发表于2017-04-11 00:28 被阅读605次

不想当将军的士兵不是好士兵,不能管理项目的编辑器不是好编辑器!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. 相关话题

相关文章

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

    不想当将军的士兵不是好士兵,不能管理项目的编辑器不是好编辑器!Sublime 作为一款优秀的编辑器,其项目管理功能...

  • Sublime Text 3 配置

    Sublime-Text-3 Windows编译选项 C++ Java Python Sublime-Text-3...

  • java是怎么运行的

    java和c++的区别 c++直接编译成机器码可直接运行在机器上java需要先编译成class文件,需要提供jre...

  • python 基础

    1、基础知识 编译与解释c、c++、java、c#等,编译为机器码或中间码后再运行;不用编译,直接运行源码,由解释...

  • Java为什么没有c/c++运行速度快?

    java为什么没有c/c++运行速度快? 1.java是VM虚拟机运行的;java编译后产生*.class文件是运...

  • 浅谈 JVM 1:一次编写,到处运行

    不同于 C、C++ 无需运行时可直接编译为机器码运行,Java 程序需要运行在 JRE 之上。而正因如此,Java...

  • 2018C++14课程第1季

    0. 什么是程序和编程语言 1.1 c++语言概述 1.2.1 命令行编程环境sublime和c++编译器 1.2...

  • [C++之旅] 0 Mac下编译运行C/C++

    [C++之旅] 0 Mac下编译运行C/C++ 编译c语言时采用gcc指令 编译c++语言时采用g++指令 以下以...

  • 强类型弱类型

    静态类型:编译时就确定类型,java/C/C++/golang 动态类型:运行时确定 python/PHP 强类型...

  • 强类型弱类型

    静态类型:编译时就确定类型,java/C/C++/golang动态类型:运行时确定 python/PHP 强类型:...

网友评论

  • e6cc96a2e98c:请问如果需要运行时打开命令行以进行输入的话这里应该怎么配置build_systems
    Henry606:很遗憾,Sublime Text 的 build system 并不能接受运行时输入。不过有一种替代方案,就是打开一个 cmd 窗口来输入参数,我在这篇文章里已经提到过了:https://www.jianshu.com/p/c9d76fe898c8
  • e1bff2a5f918:然而编译的中间文件并未保存到build文件夹中
    e1bff2a5f918:@HaleyZhu 怪不得,我用的是Vs2015的cl.exe编译器
    Henry606: @12345上山打老虎_e978 g++命令可以增加参数的,理论上来说,你在IDE中见到的功能都能实现(前提是使用g++这套编译器)
  • LinnChu:服气。

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

本文链接:https://www.haomeiwen.com/subject/zfupbttx.html