반응형

Visual Studio Code에서 SSH를 사용하여 raspberry pi에 접속하여 C/C++ 원격 개발을 준비하는 과정을 설명하고 있습니다. 



2021. 12. 15  최초작성

2022. 4. 7 컴파일 방법 추가 




Visual Studio Code를 설치하는 방법은 아래 포스트를 참고하세요. 



Visual Studio Code 설치하는 방법( Windows / Ubuntu )

https://webnautes.tistory.com/1197




Visual Studio Code에서 확장 아이콘을 클릭합니다.

 



 Remote Development을 검색하여 해당 항목에 있는 설치를 클릭합니다. 

 



원격 서버에 대한 접속 정보를 입력해야 합니다. 

Ctrl + Shift + P를 누른 후, ssh를 입력하여 검색된 항목에서 Remote-SSH: Open SSH Configuration File을 선택합니다. 

 



ssh 설정파일을 저장할 위치로 사용자 이름 아래에 있는 ssh 폴더로 선택합니다.

 




디폴트로 입력된 값을 다음처럼 수정하고 Ctrl +S를 눌러 저장합니다. 

 

Host          - 별칭, 띄어쓰기가 필요한 경우 _ 문자를 사용하세요. 

HostName - 접속한 아이피

User          - 사용자 아이디

Port           - 포트 번호



Host raspberry_Pi_WIFI

    HostName 192.168.25.27

    User pi

    Port 22 




Ctrl + Shift + P를 누른 후, ssh를 입력하여 검색된 항목에서 Remote-SSH: Connect to Host…를 선택합니다. 





앞에서 설정파일에 입력한 별칭을 선택합니다. 

 



새로운 Visual Studio Code 창이 뜹니다. Linux를 선택합니다.

 



Continue를 선택합니다. 

 



패스워드를 입력후 엔터를 누릅니다. 

 



잠시 원격 서버에 설치되길 기다린 후,

 



탐색 아이콘을 클릭하면 다음처럼 원격에 연결되었습니다라는 메시지를 볼 수 있습니다. 

 




폴더 열기를 클릭하면 원격 서버인 Raspberry Pi의 폴더를 지정하여 열수 있습니다. 폴더를 새로 생성할 수 없기 때문에 터미널에서 미리 폴더를 생성해두어야 합니다. 

 




폴더 선택시 패스워드를 다시 물어봅니다. 

 



체크하고 예를 선택합니다.

 




해당 폴더에 있는 파일이 탐색기에 보이며 원하는 파일을  선택하면 해당 파일이 열립니다. 

 



C/C++ 소스코드를 빌드하는 방법은 다음 기회에 다루도록 하겠습니다. 

파이썬의 경우에는 바로 실행이 가능해집니다. 



간단한 소스코드를 작성해봅니다. 여기에선 C언어를 예로 들고있지만 C++도 가능합니다. 

 

 

#include <stdio.h>

int main()
{
    int a = 1;
    int b = 2;
    int c = a + b;

    printf("%d\n", c);

    return 0;
}



코드를 빌드하기 위해 Ctrl + Shift + B를 누릅니다.



빌드 작업 구성을 클릭합니다.



템플릿에서 tasks.json 파일 만들기를 클릭합니다.



Others를 클릭합니다.



tasks.json 파일이 생성되고 열리는데 다음 내용으로 대체하고 Ctrl + S를 눌러 저장합니다. 

 

{
    "version": "2.0.0",
    "runner": "terminal",
    "type": "shell",
    "echoCommand": true,
    "presentation" : { "reveal": "always" },
    "tasks": [
          //C++ 컴파일
          {
            "label": "save and compile for C++",
            "command": "g++",
            "args": [
                "${file}",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}"
            ],
            "group": "build",

            //컴파일시 에러를 편집기에 반영
            //참고:   https://code.visualstudio.com/docs/editor/tasks#_defining-a-problem-matcher

            "problemMatcher": {
                "fileLocation": [
                    "relative",
                    "${workspaceRoot}"
                ],
                "pattern": {
                    // The regular expression.
                  //Example to match: helloWorld.c:5:3: warning: implicit declaration of function 'prinft'
                    "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning error):\\s+(.*)$",
                    "file": 1,
                    "line": 2,
                    "column": 3,
                    "severity": 4,
                    "message": 5
                }
            }
        },
        //C 컴파일
        {
            "label": "save and compile for C",
            "command": "gcc",
            "args": [
                "${file}",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}"
            ],
            "group": "build",

            //컴파일시 에러를 편집기에 반영
            //참고:   https://code.visualstudio.com/docs/editor/tasks#_defining-a-problem-matcher

            "problemMatcher": {
                "fileLocation": [
                    "relative",
                    "${workspaceRoot}"
                ],
                "pattern": {
                    // The regular expression.
                  //Example to match: helloWorld.c:5:3: warning: implicit declaration of function 'prinft'
                    "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning error):\\s+(.*)$",
                    "file": 1,
                    "line": 2,
                    "column": 3,
                    "severity": 4,
                    "message": 5
                }
            }
        },
        // 바이너리 실행(Ubuntu)
        {
            "label": "execute",
            "command": "${fileDirname}/${fileBasenameNoExtension}",
            "group": "test"
        }
        // 바이너리 실행(Windows)
        // {
        //     "label": "execute",
        //     "command": "cmd",
        //     "group": "test",
        //     "args": [
        //         "/C", "${fileDirname}\\${fileBasenameNoExtension}"
        //     ]
   
        // }
    ]
}




단축키를 설정해줍니다.  메뉴에서 파일 > 기본 설정 > 바로 가기 키를 선택합니다. 

이미 설정되어 있는 단축키 목록을 보여줍니다. 

 

사용자 정의로 바로 가기 키를 추가해야 합니다. 캡처화면에 빨간색 사각형으로 표시한 아이콘을 클릭합니다.

 

 

다음처럼 입력하고 Ctrl + S를 눌러서 저장합니다. 기본값을 무시하고 현재 입력한 값이 우선 적용됩니다.

(단 우분투의 경우 데스크톱 환경의 단축키가 우선입니다. 다른 곳에서 사용하지 않는 단축키를 사용해야 합니다.)

 

// 키 바인딩을 이 파일에 넣어서 기본값을 덮어씁니다.
[
    //컴파일
    { "key": "ctrl+alt+c", "command": "workbench.action.tasks.build" },
   
    //실행
    { "key": "ctrl+alt+r", "command": "workbench.action.tasks.test" }
]
 

 

소스코드 파일을 열은 후, ctrl + alt + C를 눌러 원하는 언어를 선택하여 컴파일하고

 



 ctrl + alt + r을 눌러 실행합니다. 






GDB를 사용하려면 아래 포스트를 참고하세요. 하는 방식이 간단하지는 않습니다.




Visual Studio Code에서 GDB 원격 디버깅하는 방법

https://webnautes.tistory.com/1470 





참고

 

https://code.visualstudio.com/docs/remote/ssh

 

http://taewan.kim/post/ssh_config/ 

 

반응형

해보고 확인한 것을 문서화하여 기록합니다.


공부한 내용을 공유하는 공간입니다.
부족함이 있지만 도움이 되었으면 합니다.
잘못된 부분이나 개선점을 알려주시면 감사하겠습니다.



포스트 작성시에는 문제 없었지만 이후 문제가 생길 수 있습니다.
문제가 생기면 포스트와 바뀐 환경이 있나 먼저 확인해보세요.

질문을 남겨주면 가능한 빨리 답변드립니다.


제가 쓴 책도 한번 검토해보세요 ^^

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기

댓글을 달아 주세요

">