-
Notifications
You must be signed in to change notification settings - Fork 0
/
atom.xml
120 lines (96 loc) · 13.8 KB
/
atom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>extratype's blog</title>
<subtitle>coding, math, etc.</subtitle>
<link href="/atom.xml" rel="self"/>
<link href="https://extratype.github.io/"/>
<updated>2016-11-06T12:46:32.657Z</updated>
<id>https://extratype.github.io/</id>
<author>
<name>extratype</name>
</author>
<generator uri="http://hexo.io/">Hexo</generator>
<entry>
<title>Rust 개발 환경 세팅</title>
<link href="https://extratype.github.io/2016/10/22/Rust-%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-%EC%84%B8%ED%8C%85/"/>
<id>https://extratype.github.io/2016/10/22/Rust-개발-환경-세팅/</id>
<published>2016-10-22T03:47:41.000Z</published>
<updated>2016-11-06T12:46:32.657Z</updated>
<content type="html"><![CDATA[<p>나의 Rust 개발 환경을 정리해서 적어둔다.</p>
<ul>
<li>Windows 10 x64</li>
<li>MSYS2 + rustup</li>
<li>Rust stable x86_64 GNU ABI</li>
</ul>
<h2 id="MSYS2-설치하기"><a href="#MSYS2-설치하기" class="headerlink" title="MSYS2 설치하기"></a>MSYS2 설치하기</h2><p>리눅스스러운 환경을 구축하고 MinGW GCC 툴체인을 쓰기 위해서 <a href="https://msys2.github.io" target="_blank" rel="external">MSYS2</a>를 먼저 설치한다. Rust와 GCC를 함께 설치할 수도 있지만 <a href="https://github.com/rust-lang/rust/issues/19519#issuecomment-246117842" target="_blank" rel="external">문제</a>가 있어 따로 설치한다. MSYS2 인스톨러를 실행하고 난 다음엔 사이트에 나와있는 대로 업그레이드를 해주도록 하자.</p>
<p><code>msys2_shell.cmd</code> 스크립트를 돌려서 MSYS2나 MinGW-w64 환경 쉘을 띄울 수 있다. <code>-where</code> 옵션을 주면 작업 디렉토리를 지정할 수 있다. 다른 옵션은 스크립트 파일을 참고하기 바란다. 탐색기의 컨텍스트 메뉴에 MSYS2 쉘을 추가하려면 <a href="https://github.com/njzhangyifei/msys2-mingw-shortcut-menus" target="_blank" rel="external">여기</a>를 참고.</p>
<p>MSYS2 환경은 윈도우와 독립된 POSIX 환경처럼 보이는데, 실제로는 MSYS2 툴체인으로 컴파일된(MSYS2 DLL을 사용하는) 프로그램에 한해서 그러하다. MinGW-w64 툴체인으로 컴파일된 프로그램들은 MSYS2 DLL을 거치지 않고 native로 동작한다. 이런 이유로 MSYS2를 분리된 POSIX 개발 환경으로 꾸밀 수는 없다.</p>
<p>나는 아예 윈도우와 MSYS2 환경을 통합해서 사용하기로 결정했다. <code>PATH</code> 환경 변수에 <code>C:\msys64\mingw64\bin</code>과 <code>C:\msys64\usr\bin</code>을 순서대로 추가한다. 단, 충돌을 방지하기 위해 <code>%SystemRoot%\system32</code> 보다 아래에 둔다. MSYS2 쉘에서 다른 윈도우용 툴들을 쓰기 위해 <code>msys2_shell.cmd</code>에서 <code>MSYS2_PATH_TYPE=inherit</code>를 설정한다. 이렇게 하면 MSYS2 쉘에서는 MSYS2 바이너리들을 <code>system32</code> 바이너리보다 우선하되 다른 툴들도 사용할 수 있게 된다.</p>
<h2 id="Rust-설치하기"><a href="#Rust-설치하기" class="headerlink" title="Rust 설치하기"></a>Rust 설치하기</h2><p>인스톨러보다 Rust 툴체인 관리가 편해지는 <a href="https://www.rustup.rs/" target="_blank" rel="external">rustup</a>을 권장한다. 인스톨러로 Rust를 설치해도 되는데 MSYS2와 같이 쓰려면 ‘Linker and platform libraries’ 옵션을 해제하고 설치하면 된다. rustup으로 Rust를 설치하면 최소한의 MinGW 툴체인이 같이 설치되며 제거할 수 있는 옵션이 아직 <a href="https://github.com/rust-lang-nursery/rustup.rs/issues/718" target="_blank" rel="external">없다</a>. 임시방편으로 이렇게 제거하면 된다.</p>
<ol>
<li>MinGW 툴체인이 설치된 디렉토리(예: <code>%USERPROFILE%\.multirust\toolchains\stable-x86_64-pc-windows-gnu\lib\rustlib\x86_64-pc-windows-gnu</code>)로 이동한다.</li>
<li><code>bin</code> 폴더의 이름을 <code>bin~</code>로 바꾼다.</li>
<li><code>lib~</code> 폴더를 만들고 <code>lib</code> 폴더 안의 <code>*.a</code> 파일들을 <code>lib~</code>로 모두 옮긴다.</li>
</ol>
<p>나중에 Rust 툴체인을 삭제하거나 업그레이드할 일이 생기면 이렇게 백업해둔 파일들을 복원한 다음 rustup을 실행하면 된다.</p>
<p><a href="https://github.com/rust-lang/rust-wiki-backup/blob/master/Using-Rust-on-Windows.md" target="_blank" rel="external">여기</a>를 참고하여 MinGW 툴체인을 설치한다.</p>
<h2 id="IDE-선택하기"><a href="#IDE-선택하기" class="headerlink" title="IDE 선택하기"></a>IDE 선택하기</h2><p><a href="https://areweideyet.com/" target="_blank" rel="external">여기</a>에서 IDE들을 비교해볼 수 있다. 나는 VS Code와 Eclipse를 선택했다. VS Code는 outline 창이 없다(Go to Symbol이나 Fold All로 흉내는 낼 수 있다)는 점만 빼면 가장 쓸만했다. 디버깅도 되는데 멀티스레드를 지원하지 않는 문제가 있다. 반대로 RustDT는 outline 기능도 있고 멀티스레드 디버깅도 지원하지만 매개변수 툴팁이 안 나오는 등 편집기가 마음에 들지 않았다.</p>
<p>다른 편집기도 조금씩 써보기는 했다.</p>
<ul>
<li>Atom은 UI가 VS Code만큼 깔끔하지 않았다.</li>
<li>IntelliJ는 racer에 기반을 두지 않고 자체적으로 자동 완성을 지원하고, outline 기능도 있다. 매개변수 툴팁이 없고 디버깅도 지원하지 않는다.</li>
<li>Visual Studio는 cargo로 빌드가 되지 않았다(지금은 되는 듯 하다).</li>
</ul>
<p>VS Code는 이렇게 세팅했다.</p>
<ol>
<li>Rust 소스 코드 다운로드: <code>rustup component add rust-src</code></li>
<li>RustyCode, Native Debug, TOML Language Support 확장 설치</li>
<li>rustup 설치시 PATH를 등록하지 않았다면(예: <code>%USERPROFILE%\.cargo\bin</code>) <code>rust.cargoHomePath</code> 설정</li>
</ol>
<p>Eclipse는 이렇게 세팅했다.</p>
<ol>
<li>Eclipse Java Neon 설치</li>
<li>CDT 설치, Marketplace에서 RustDT 설치</li>
<li>설정에서 각종 경로 지정. Download 버튼으로 쉽게 설치할 수는 있는데 기본 <code>bin</code> 폴더가 아니라 <code>RustDT</code> 폴더에 설치된다. 나는 <a href="https://github.com/RustDT/Rainicorn" target="_blank" rel="external">Rainicorn</a>까지 <code>bin</code> 폴더에 직접 설치했다.</li>
</ol>
<p>Racer는 릴리즈된 버전이 오래되었으니 Git 저장소에서 설치하는 것을 추천한다:<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">cargo install --git https://github.com/phildawes/racer</div></pre></td></tr></table></figure></p>
<p>디버깅은 <code>gdb</code>로 이루어진다. Rust 소스 코드에 포함된 pretty printer를 쓰면 변수를 깔끔하게 볼 수 있다. 단 디버깅이 느려지거나 가끔 멈추는 문제가 있다. Pretty printer를 쓰려면 우선 <code>.gdbinit</code> 파일을 만든다.</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div></pre></td><td class="code"><pre><div class="line">python</div><div class="line">print(<span class="string">'Loading Rust pretty-printers...'</span>)</div><div class="line"><span class="keyword">import</span> sys</div><div class="line"><span class="keyword">import</span> os</div><div class="line"><span class="keyword">import</span> subprocess </div><div class="line">sys.path.append(os.path.join(subprocess.check_output([<span class="string">'rustc'</span>, <span class="string">'--print=sysroot'</span>]).decode(sys.stdout.encoding).strip(), <span class="string">'lib'</span>, <span class="string">'rustlib'</span>, <span class="string">'src'</span>, <span class="string">'rust'</span>, <span class="string">'src'</span>, <span class="string">'etc'</span>))</div><div class="line"><span class="keyword">import</span> gdb_rust_pretty_printing</div><div class="line">gdb_rust_pretty_printing.register_printers(gdb)</div><div class="line">end</div></pre></td></tr></table></figure>
<p>VS Code의 경우 <code>launch.json</code>을 수정한다. (예시)<br><figure class="highlight json"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div></pre></td><td class="code"><pre><div class="line">{</div><div class="line"> <span class="attr">"version"</span>: <span class="string">"0.2.0"</span>,</div><div class="line"> <span class="attr">"configurations"</span>: [{</div><div class="line"> <span class="attr">"name"</span>: <span class="string">"Debug"</span>,</div><div class="line"> <span class="attr">"type"</span>: <span class="string">"gdb"</span>,</div><div class="line"> <span class="attr">"request"</span>: <span class="string">"launch"</span>,</div><div class="line"> <span class="attr">"autorun"</span>: [</div><div class="line"> <span class="string">"source .gdbinit"</span></div><div class="line"> ],</div><div class="line"> <span class="attr">"target"</span>: <span class="string">"./target/debug/hello_rust.exe"</span>,</div><div class="line"> <span class="attr">"cwd"</span>: <span class="string">"${workspaceRoot}"</span></div><div class="line"> }]</div><div class="line">}</div></pre></td></tr></table></figure></p>
<p>Eclipse에서는 Debug Configuration에서 Rust Application을 만들면 된다. 기본적으로 <code>.gdbinit</code>를 실행하게 되어 있다.</p>
]]></content>
<summary type="html">
<p>나의 Rust 개발 환경을 정리해서 적어둔다.</p>
<ul>
<li>Windows 10 x64</li>
<li>MSYS2 + rustup</li>
<li>Rust stable x86_64 GNU ABI</li>
</ul>
<h2 id="MSYS
</summary>
<category term="coding" scheme="https://extratype.github.io/categories/coding/"/>
<category term="Rust" scheme="https://extratype.github.io/categories/coding/Rust/"/>
</entry>
<entry>
<title>MSYS2 Git 사용하기</title>
<link href="https://extratype.github.io/2016/10/16/MSYS2-Git-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0/"/>
<id>https://extratype.github.io/2016/10/16/MSYS2-Git-사용하기/</id>
<published>2016-10-15T15:59:55.000Z</published>
<updated>2017-01-01T13:03:36.340Z</updated>
<content type="html"><![CDATA[<p><strong>주의: 언급한 에러 외에도 잔버그가 여럿 있으니 권장하지 않음!!</strong></p>
<h2 id="Windows에서-Git-사용하기"><a href="#Windows에서-Git-사용하기" class="headerlink" title="Windows에서 Git 사용하기"></a>Windows에서 Git 사용하기</h2><p><a href="https://git-for-windows.github.io/" target="_blank" rel="external">Git for Windows</a>를 설치하면 자체 MSYS2 환경도 같이 설치된다. Git Bash가 바로 이 환경에서 동작한다.</p>
<p>이미 <a href="https://msys2.github.io/" target="_blank" rel="external">MSYS2</a>를 설치했다면 기존 MSYS2 환경에 덮어서 설치할 수 <a href="https://github.com/git-for-windows/git/wiki/Install-inside-MSYS2-proper" target="_blank" rel="external">있다</a>. 이 <a href="https://github.com/git-for-windows/git/issues/284" target="_blank" rel="external">issue</a>에 따르면 두 환경이 아직 통합되지 않은 것 같다.</p>
<p>나는 아예 MSYS2 Git(<code>git</code>)을 설치해서 사용하고 있는데, Git 공식이 아니어서 그런지 Git을 쓰는 다른 프로그램들이 오류를 뱉는 경우가 있었다. 대처법을 여기에 정리해 올린다.</p>
<h2 id="Visual-Studio-Code"><a href="#Visual-Studio-Code" class="headerlink" title="Visual Studio Code"></a>Visual Studio Code</h2><p>Git을 쓰려고 하면 <code>ENOENT</code> 에러를 뱉는다. 관련 issue는 <a href="https://github.com/Microsoft/vscode/issues/7998" target="_blank" rel="external">여기</a>. 링크엔 Cygwin 얘기만 나오는데 MSYS2에선 아래처럼 symlink를 만들면 된다.<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">C:\> mklink c c:\</div></pre></td></tr></table></figure></p>
<p><code>/D</code>나 <code>/J</code> 옵션을 붙여주지 않아도 MSYS2라 그런지 잘 된다.</p>
<h2 id="Atlassian-SourceTree"><a href="#Atlassian-SourceTree" class="headerlink" title="Atlassian SourceTree"></a>Atlassian SourceTree</h2><p>[터미널]을 누르면 뻗어버린다. [옵션]->[Git]에서 Git Bash 사용 옵션을 끄면 된다. HTTPS로 푸시하려고 하면 잘 안 되는데 MSYS2에서 OpenSSH 설치해서 쓰면 잘 된다. GitHub에 푸시하는 방법은 <a href="https://help.github.com/articles/error-permission-denied-publickey/" target="_blank" rel="external">여기</a>를 참고.</p>
]]></content>
<summary type="html">
<p><strong>주의: 언급한 에러 외에도 잔버그가 여럿 있으니 권장하지 않음!!</strong></p>
<h2 id="Windows에서-Git-사용하기"><a href="#Windows에서-Git-사용하기" class="headerlink" ti
</summary>
<category term="coding" scheme="https://extratype.github.io/categories/coding/"/>
<category term="MSYS2" scheme="https://extratype.github.io/tags/MSYS2/"/>
<category term="Git" scheme="https://extratype.github.io/tags/Git/"/>
</entry>
</feed>