최근에 다시 Rust를 공부해보려고 VSCode랑 다시 설치하는데 예전에 했던게 기억이 안 나서 몇일을 고생했다.
다른 분들의 설치를 보면 예전에 내가 했던거랑 조금 다르다. 이것저것 많이 설치하는거 같기도 하고,
어째거나 몇일 고생해서 알아낸 부분들을 순서대로 입력해 둔다.
1. Visual Studio 사이트에서 vs_BuildTools.exe를 다운받아 설치한다. (mingw도 된다고 하는데 안 해봐서 잘 모름)
리눅스의 경우 셋팅을 해보지 않아서 잘 모르겠는데, 윈도우즈의 경우 C++의 빌드 환경을 사용하도록 되어 있어
미리 설치되어있지 않으면 설치하도록한다.
2. Rustup-init.exe 파일을 실행해서 설치한다.
설치가 다되면 cmd 또는 Powershell환경에서 rustup --version, cargo --version를 실행후 정보가 나오는지 확인한다.
3. 새로운 Rust용 워크스페이스 폴더를 생성한다
예) D:\Projects\Rust
4. VSCode를 실행하여 Rust용 확장기능을 추가한다.
여기서 부터 예전과 달라서 많이 고생좀 했다. 사실 맞는지도 잘 모르겠다.
이글을 작성하면서 다른 블로그를 보니까 C/C++확장기능 없이 실행환경을 꾸미는 것도 가능한가 보다
Rust라고 치면 예전에선 Rust(rls)만 설치해서 사용했던거 같은데 지금은 Rust만나오고 뒤에 (rls)이 붙은거는
찾아 보기 어렵다. 그냥 Rust(녹슨톱니바퀴, rust-lang)만 설치하면 추가로 관련 기능을 설치한다고 오른쪽 아래
알림이 뜬다. 모두 설치한다.
첫번째 방법
C/C++ 확장기능을 찾아 설치한다. ( 예전에는 설치하지 않았던거 같은데, 기억이 안난다)
두번째 방법
code runner를 설치한다.
예전엔 이걸로 사용한 기억은 있다. 그때 c/c++ 확장기능설치는 안 했던거 같다.
여기서 끝 다른 아무것도 할 필요가 없다.
코드를 작성하고 마우스 오를쪽 버튼으로 맨위 코드 실행을 선택하면 된다.
근데 나는 다른 언어처럼 F5키로 컴파일과 실행을 진행하고 싶다.
그래서 두번째 방법보다 첫번째 방법으로 진행한다.
5. VSCode에서 폴더열기를 해서 위에서 만들어 놓은 폴더를 선택한다.
6. 터미널 창을 열고(Ctrl+`)
D:\Projects\Rust>cargo new helloworld를 입력하여 helloworld 프로젝트을 생성한다.
제대로 되었다면 helloworld폴더가 생성되고 그 아래 src등 몇가지 폴더및 파일이 생성된다. 정상이다.
7. VSCode에서 src폴더아래 main.rc파일을 열고
Terminal > Run Task를 선택 cargo -> cargo build helloworld를 선택한다.
아래 터미널창에서 Build가 이루어 진다.
다시 Terminal > Run Task를 선택 cargo -> cargo run helloworld를 선택한다.
아래 터미널에서 hello world가 나오면 정상적으로 실행된 것이다.
여기까지는 그냥 몇번이고 실패없이 실행했다. 문제는 다음부터다.
다른 블로그에선 확장기능을 몇가지 더 추가 하고, 하는게 난 뭔소린지 모르겠고 그대로 해도 안되고..짜증이..막..후~
8. main.rs 코드 화면에서 F5키를 누르면 컴파일 환경 선택하라고 나온다.
난 윈도우즈니까 C++(Windows)를 선택했다.
뭔가 에러가 나면서 launch.json추가하고 열건지 물어본다. 확인을 선택한다.
아무것도 수정하지 않고 다시 main.rs를 실행하면 ""파일을 찾을 수 없다고 나오면서 launch.json을 열겠냐고 물어본다
여기서부터 무한 반복이다. 온몸이 간질거린다.. 막 그만두고 싶다.
코드를 실행시키려고 'F5'키를 누르면 컴파일이 진행되면서 실행파일이 만들어 진다.
그 실행파일 위치는 프로젝트폴더의 target > debug 폴더아래 helloworld.exe(우리가 만든 프로젝트이름)파일로 생성되어 있다. 근데 F5키로 실행파일 찾지 못하는 것이다.
launch.json파일을 열어서 "program":"(~~~)" 이부분을 수정하면 된다.
VSCode에는 환경변수를 대신하는 단어들이 몇개 있는데 이거를 이용해서 위 가로 부분을 채우면 된다.
대부분 다른 블로그에선 "program": "${workspaceRoot}/target/debug/${workspaceFolderBasename}"이렇게 만 쓰라고 나온다. 난 아무리해도 안된다. 서로 환경이 달라서 그런건지.
"program":"${workspaceRoot}/${command:extension.commandvariable.file.relativeFileDirname1Up}/target/debug/${command:extension.commandvariable.file.relativeFileDirname1Up}.exe"
이렇게 입력하면되는데, VSCode확장기능인 'Command Variable'을 설치해야된다.
원래 VSCode환경변수중는 'command:extension.commandvariable.file.relativeFileDirname1Up' 이런게 없다. 'relativeFileDirname'만 있다. 'relativeFileDirname'는 main.rs의 위치를 가리키는데 'helloworld/src' 이다. 이거를
둘로 나눠서 helloworld만 가져와야 하는데, 이 기능을 제공해주는 확장기능이 'Command Variable'이다.
'Command Variable'를 확장기능 설치하는 곳에서 찾아 설치한다.
9. main.rs에서 F5를 눌러 실행을 시킨다.. 돌아간다.
프로그램을 수정하고 다시 F5키를 누른다. 수정 전의 프로그램만 수행된다.
미리 컴파일을 해줘야 한다. 위 7번의 첫번째줄을 먼저 실행하고 F5를 누르면된다.
아래는 내 VSCode Rust launch.json, tasks.json파일이다.
tasks.json은 컴파일 할때 사용되는 파일이다. 여러 파일을 컴파일 하다보면 cargo build 프로젝트명이 많이 나온다.
그중에 선택하려면 힘드니까 tasks.json을 만들어 놓고 Terminal > Run Task 에서 맨위 Rust: cargo build만
선택해 주면 된다. 나중에 launch.json에 컴파일 기능까지 추가 해야 함. 미리 컴파일을 해야되는 불편없이.
launch.json
--------------------------------------
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "시작",
"type": "cppvsdbg",
"request": "launch",
"program": "${workspaceRoot}/${command:extension.commandvariable.file.relativeFileDirname1Up}/target/debug/${command:extension.commandvariable.file.relativeFileDirname1Up}.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"console": "integratedTerminal",
}
]
}
------------------------------------------------
task.json
------------------------------------------------
{
"version": "2.0.0",
"tasks": [
{
"type": "cargo",
"subcommand": "build",
"problemMatcher": [
"$rustc"
],
"group": "build",
"label": "Rust: cargo build"
}
]
}
---------------------------------------------
몇일을 고생했다. 아~ 걍 하지 말까...