Serach

2013년 10월 10일 목요일

Sublime2 Build System


Build systems(앞으로는 빌드 시스템으로 표기)은 외부 프로그램을 통해서 파일들을 실행할 수 있게 해주고 Sublime Text 안에서 생성한 출력을 볼 수 있게 해준다.빌드 시스템은 2, 3 부분 정도로 구성되어 있다:
  • JSON 포맷의 configuration data(.sublime-build 파일들)
  • 빌드 프로세스를 실행하는 Sublime Text 커맨드
  • 추가로, 외부 실행 파일(스크립트, 바이너리 파일)
본질적으로, .sublime-build 파일들은 외부 프로그램과 Sublime Text 커맨들의 configuration data 이다. .sublime-build 파일에서, 스위치, 옵션, 환경 정보들을 명시한다.
Sublime Text 커맨드는 .sublime-build 파일에 저장되어 있는 data를 받는다. 이 시점에서, 커맨드는 파일들을 빌드하는데 필요한 일을 한다. 기본적으로, 빌드 시스템은 exec 커맨드를 사용하고 exec 커맨드는 Packages/Default/exec.py 에 구현되어 있다. 아래에서 설명을 하겠지만, 이 커맨드를 오버라이드할 수 있다.
외부 프로그램은 파일들을 빌드하려고 만든 쉘 스크립트이거나 make 나 tidy 같은 잘 알려져 있는 유틸리티일 것이다. 대게는, 이 실행 파일들은 실행하는데 참조가 되는 스위치들과 옵션들과 함께 파일들이나 디렉토리들에 대한 경로를 받는다.
빌드 시스템은 특별한 이유가 없다면, 그 어떤 외부 프로그램도 호출할 필요는 없다: Sublime Text 커맨드에서 전체 빌드 시스템을 구현할 수 있다.

File Format

빌드 시스템 파일들은 JSON 을 사용한다. 여기에 예제가 있다:
{
    "cmd": ["python", "-u", "$file"],
    "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
    "selector": "source.python"
}

Options

  • cmd : 실행할 커맨드와 인자들을 가지고 있는 배열. 절대 경로를 명시하지 않으면, 외부 프로그램은 시스템의 환경 변수들 중에 하나인 PATH 를 탐색할 것이다.
  • File_regex : Optional. cmd 의 에러 출력을 잡아내는 정규 표현식(펄 스타일). 자세한 내용은 다음 섹션을 참고
  • line_regex : Optional. file_regex 가 현재 라인에서 일치하는 것이 없고 line_regex가 존재하고 일치하는 것이 있다면, file_regex 와 일치하는 라인이 발견될 때까지 버퍼를 통해서 되돌아 간다. 그래서 파일과 라인을 결정하는 두 일치되는 내용을 goto 에 사용한다.
  • selector : Optional. Tools > Build System > Automatic 이 true 일 때 사용된다. Sublime Text는 활성화된 뷰의 적절한 빌드 시스템을 찾는데 이 scope selector를 사용한다.
  • working_dir : Optional. cmd를 실행하기 전에 current directory를 바꿀 디렉토리. 원래의 current directory는 나중에 복구된다.
  • encoding : Optional. cmd 의 출력 인코딩. 반드시 유효한 파이썬 인코딩이어야 한다. 기본값은 UTF-8.
  • target : Optional. 실행될 Sublime Text 커맨드. 기본값은 exec(Packages/Default/exec.py). 이 커맨드는 .bulid-system 파일에 명시되어 있는 configuration data를 받는다. 기본 빌드 시스템 커맨드를 오버라이드 할 수도 있다. 빌드 시스템의 기본 커맨드 오버라이드를 선택하면 .sublime-build 파일에 임시 변수를 추가할 수 있다.
  • env : Optional. cmd 에 전달되기 전에 현재 프로세스에 머지될 환경 변수의 딕셔너리. 예를 들면, 시스템 설정을 손대지 않고 환경 변수를 추가하거나 변경할 수 있다.
  • shell : Optional. true 로 설정되어 있으면, cmd는 쉘을 통해서 실행될 것이다(cmd.exe, bash..)
  • path : Optional. 이 스트링은 cmd가 호출되기 전에 현재 프로세스의 PATH를 대체한다. 이전 PATH 값은 실행된 이후에 복구된다. 시스템의 설정을 건드리지 않고 PATH에 디렉토리를 추가하려면 이 설정을 사용하면 된다.
  • variants : Optional. 매인 빌드 시스템의 옵션을 오버라이드하는 옵션들의 딕셔너리 리스트. Variant "name" 은 빌드 시스템의 selector 가 활성화된 파일과 일치하면 용이한 접근을 위해서 커맨드 팔레트에 나타난다.
  • name : variant 내에서만 유효한 옵션. variant 빌드 시스템을 식별한다. name이 Run이면, variant가 Tools > Build System 메뉴 아래에 나타날 것이고 Ctrl + Shift + B 에 바인딩 될 것이다.

Capturing Error Output with file_regex

file_regex 옵션은 빌드 프로그램의 출력에서 네가지 필드로 에러 정보를 잡아내는데 펄 스타일의 정규표현식을 사용한다. 주로 파일 이름, 라인 넘버, 컬럼 넘버, 에러 메시지이다. 이 정보들을 잡아내는데 패턴에 있는 그룹을 사용한다. 파일 이름 필드와 라인 넘버 필드는 반드시 필요하다.
에러 정보를 잡아내면, F4와 Shift + F4를 이용해서 프로젝트 파일에 있는 에러 인스턴스들을 찾아갈 수 있다. 가능하다면, 잡아낸 에러 메시지가 상태바에 표시될 것이다.

Platform-specific Options

윈도우와 OSX 그리고 리눅스는 빌드 시스템에 있는 플랫폼 고유의 데이터를 제공할 수 있게 해준다. 여기에 예제가 있다:
{
    "cmd": ["ant"],
    "file_regex": "^ *\\[javac\\] (.+):([0-9]+):() (.*)$",
    "working_dir": "${project_path:${folder}}",
    "selector": "source.java",

    "windows":
    {
        "cmd": ["ant.bat"]
    }
}
이 경우에는, ant 가 윈도우를 제외한 각각의 플랫폼에서 실행이 될 것이고, 윈도우에서는 ant.bat 가 실행될 것이다.

Variants

여기에 variants를 이용해서 제작된 빌드 시스템의 예제가 있다.
{
    "selector": "source.python",
    "cmd": ["date"],

    "variants": [

        { "cmd": ["ls -l *.py"],
          "name": "List Python Files",
          "shell": true
        },

        { "cmd": ["wc", "$file"],
          "name": "Word Count (current file)"
        },

        { "cmd": ["python", "-u", "$file"],
          "name": "Run"
        }
    ]
}
이러한 설정이 주어지면, Ctrl + B 는 data 커맨드를 실행하고 Ctrl + Shift + B 는 파이썬 인터프리터를 실행하고 남아 있는 variants는 빌드 시스템이 활성화 되었던 커맨드 팔레트에 나타날 것이다.

Build System Variables

빌드 시스템은 .sublime-build 파일에서 다음의 변수들을 확장한다:
$file_pathThe directory of the current file, e. g., C:Files.
$fileThe full path to the current file, e. g., C:FilesChapter1.txt.
$file_nameThe name portion of the current file, e. g., Chapter1.txt.
$file_extensionThe extension portion of the current file, e. g., txt.
$file_base_nameThe name only portion of the current file, e. g., Document.
$packagesThe full path to the Packages folder.
$projectThe full path to the current project file.
$project_pathThe directory of the current project file.
$project_nameThe name portion of the current project file.
$project_extensionThe extension portion of the current project file.
$project_base_nameThe name only portion of the current project file.

Place holders for Variables

snippets에서 발견된 사항들이 이 변수들과 함께 사용될 수 있다. 예를 들면:
${project_name:Defualt}
이 설정은 프로젝트가 하나만 있으면 현재 프로젝트의 이름을 내보내고, 그 외에는 Default 를 내보낸다.
${file/\.php/\.txt/}
이 설정은 현재 파일의 전체 경로를 내보내면서 .php 를 .txt 로 대체한다.

Running Build Systems

Tools > Build System 에서 원하는 빌드 시스템을 선택하고, Tools > Build 나 F7을 누른다.

Troubleshooting Build Systems

실행 파일에 대한 절대 경로를 명시하지 않았다면, 빌드 시스템은 PATH 에서 실행 파일을 찾을 것이다. 그러므로, PATH 변수는 반드시 정확하게 설정되어 있어야 한다.
특정 OS에서는, PATH 에 대한 값이 터미널 윈도우에서부터 일반 어플리케이션까지 다양하게 있을 수 있다. 그래서, 빌드 시스템에서 사용하고 있는 커맨드가 커맨드 라인에서 잘 작동을 하더라도, Sublime Text에서는 제대로 작동하지 않을 수도 있다. 이는 쉘의 유저 프로파일 때문이다.
이를 해결하려면, 원하는 PATH를 확실하게 설정을 해서 Sublime Text 같은 일반 어플리케이션이 찾을 수 있어야 한다. 좀더 자세한 내용은 아래의 링크를 보라.
다른 대안으로는, cmd에 명시된 실행 파일의 위치를 알려주는 PATH를 오버라이드하는 .sublime-build 파일에 있는 path 요소를 사용할 수 있다. PATH 에 대한 새로운 값은 빌드 시스템이 실행 되는 동안에만 효과가 있다. 실행이 된 후에는 이전 PATH 값으로 복구된다.

댓글 없음:

댓글 쓰기