다음을 통해 공유


자습서: Visual Studio에서 C++ 플랫폼 간 프로젝트 만들기

Visual Studio C 및 C++ 개발은 더 이상 Windows용이 아닙니다. 이 자습서에서는 Windows 및 Linux에서 C++ 플랫폼 간 개발을 위해 Visual Studio를 사용하는 방법을 보여 줍니다. CMake를 기반으로 하므로 Visual Studio 프로젝트를 만들거나 생성할 필요가 없습니다. CMakeLists.txt 파일이 포함된 폴더를 열면 Visual Studio에서 IntelliSense 및 빌드 설정을 자동으로 구성합니다. Windows에서 코드를 로컬로 편집, 빌드 및 디버깅을 빠르게 시작할 수 있습니다. 그런 다음, Visual Studio 내에서 Linux에서 동일한 작업을 수행하도록 구성을 전환합니다.

이 자습서에서는 다음 방법을 알아봅니다.

  • GitHub에서 오픈 소스 CMake 프로젝트 복제
  • Visual Studio에서 프로젝트 열기
  • Windows에서 실행 대상 빌드 및 디버그
  • Linux 컴퓨터에 연결 추가
  • Linux에서 동일한 대상 빌드 및 디버그

필수 조건

  • 플랫폼 간 C++ 개발을 위한 Visual Studio 설정

    • 먼저 Visual Studio를 설치 하고 C++ 워크로드를 사용하여 C++Linux 개발을 사용하여 데스크톱 개발을 선택합니다. 이 최소 설치는 3GB에 불과합니다. 다운로드 속도에 따라 설치하는 데 10분 이상 걸리지 않습니다.
  • 플랫폼 간 C++ 개발을 위한 Linux 머신 설정

    • Visual Studio에는 Linux의 특정 배포가 필요하지 않습니다. OS는 물리적 컴퓨터, VM 또는 클라우드에서 실행될 수 있습니다. WSL(Linux용 Windows 하위 시스템)을 사용할 수도 있습니다. 그러나 이 자습서에서는 그래픽 환경이 필요합니다. WSL은 주로 명령줄 작업에 사용되므로 여기서는 권장되지 않습니다.

    • Visual Studio를 사용하려면 Linux 머신에서 C++ 컴파일러, gdb, ssh, rsync, make, 및 zip가 필요합니다. Debian 기반 시스템에서 다음 명령을 사용하여 이러한 종속성을 설치할 수 있습니다.

      sudo apt install -y openssh-server build-essential gdb rsync make zip
      
    • Visual Studio에는 서버 모드가 사용하도록 설정된 Linux 컴퓨터의 CMake 최신 버전(최소 3.8)이 필요합니다. Microsoft는 모든 Linux 배포판에 설치할 수 있는 CMake의 유니버설 빌드를 생성합니다. 이 빌드를 사용하여 최신 기능이 있는지 확인하는 것이 좋습니다. GitHub의 CMake 리포지토리의 Microsoft 포크에서 CMake 이진 파일을 가져올 수 있습니다. 해당 페이지로 이동하여 Linux 컴퓨터의 시스템 아키텍처와 일치하는 버전을 다운로드한 다음 실행 파일로 표시합니다.

      wget <path to binary>
      chmod +x cmake-3.11.18033000-MSVC_2-Linux-x86_64.sh
      
    • 를 사용하여 스크립트 --help를 실행하는 옵션을 볼 수 있습니다. -prefix은 Visual Studio에서 CMake를 찾는 기본 위치이므로 /usr 경로에 설치를 지정하는 옵션을 사용하는 것이 좋습니다. 다음 예제에서는 Linux-x86_64 스크립트를 보여줍니다. 다른 대상 플랫폼을 사용하는 경우 필요에 따라 변경합니다.

      sudo ./cmake-3.11.18033000-MSVC_2-Linux-x86_64.sh --skip-license --prefix=/usr
      
  • Windows 컴퓨터에 설치된 Windows용 Git입니다.

  • GitHub 계정.

GitHub에서 오픈 소스 CMake 프로젝트 복제

이 자습서에서는 GitHub의 Bullet 물리 SDK를 사용합니다. 많은 애플리케이션에 대한 충돌 감지 및 물리학 시뮬레이션을 제공합니다. SDK에는 다른 코드를 작성하지 않고도 컴파일하고 실행하는 샘플 실행 프로그램이 포함되어 있습니다. 이 자습서에서는 소스 코드 또는 빌드 스크립트를 수정하지 않습니다. 시작하려면 Visual Studio가 설치된 컴퓨터의 GitHub에서 bullet3 리포지토리를 복제합니다.

git clone https://github.com/bulletphysics/bullet3.git
  1. Visual Studio 주 메뉴에서 CMake 파일 > 열기>를 선택합니다. 다운로드한 CMakeLists.txt bullet3 리포지토리의 루트에 있는 파일로 이동합니다.

    Visual Studio 메뉴의 스크린샷으로,

    폴더를 열자마자 폴더 구조가 솔루션 탐색기에 표시됩니다.

    폴더 보기 모드의 솔루션 탐색기 창 스크린샷 프로젝트의 내용(파일 및 폴더)이 표시되고 CMakeLists.txt 강조 표시됩니다.

    이 보기는 논리 또는 필터링된 보기가 아니라 디스크에 있는 항목을 정확하게 보여줍니다. 기본적으로 숨겨진 파일은 표시되지 않습니다.

  2. 폴더의 모든 파일을 보려면 모든 파일 표시 단추를 선택합니다.

    모든 파일 표시 단추가 강조 표시된 솔루션 탐색기 창의 스크린샷 이 단추는 솔루션 탐색기 창의 위쪽과 오른쪽에 있습니다.

대상 보기로 전환

CMake를 사용하는 폴더를 열면 Visual Studio에서 CMake 캐시를 자동으로 생성합니다. 이 작업은 프로젝트 크기에 따라 몇 분 정도 걸릴 수 있습니다.

  1. 출력 창에서 출력 표시를 선택한 다음, CMake를 선택하여 캐시 생성 프로세스의 상태를 모니터링합니다. 작업이 완료되면 "대상 정보 추출 완료"가 표시됩니다.

    출력 창의 스크린샷. 출력 표시: 드롭다운이 CMake로 설정됩니다.

    이 작업이 완료되면 IntelliSense가 구성됩니다. 프로젝트를 빌드하고 애플리케이션을 디버그할 수 있습니다. 이제 Visual Studio는 CMakeLists 파일에 지정된 대상에 따라 솔루션의 논리적 보기를 표시합니다.

  2. 솔루션 탐색기의솔루션 및 폴더 단추를 사용하여 CMake 대상 보기로 전환합니다.

    솔루션 탐색기에서 솔루션 및 폴더 버튼이 선택된 스크린샷. 선택된 c:\projects\bullet3와 CMake 타겟 보기를 포함한 드롭다운 메뉴가 표시됩니다.

    Bullet SDK의 보기는 다음과 같습니다.

    솔루션 탐색기 CMake 대상 보기의 스크린샷. App_BasicExample(실행 파일), App_ExampleBrowser(실행 파일) 등의 항목이 있는 BULLET_PHYSICS Project라는 항목이 포함되어 있습니다.

    대상 보기는 이 원본 기반의 내용을 보다 직관적으로 볼 수 있습니다. 일부 대상은 라이브러리이고 다른 대상은 실행 파일인 것을 볼 수 있습니다.

  3. CMake 대상 보기에서 노드를 확장하여 해당 파일이 디스크에 있을 수 있는 모든 위치에서 소스 코드 파일을 확인합니다.

명시적 Windows x64-Debug 구성 추가

Visual Studio는 Windows용 기본 x64 디버그 구성을 만듭니다. 구성은 Visual Studio가 CMake에 사용할 플랫폼 대상을 이해하는 방법입니다. 기본 구성은 디스크에 표시되지 않습니다. 구성을 명시적으로 추가하면 Visual Studio에서 CMakeSettings.json파일을 만듭니다. 지정한 모든 구성에 대한 설정으로 채워집니다.

  1. 새 구성을 추가합니다. 도구 모음에서 구성 드롭다운을 열고 구성 관리를 선택합니다.

    도구 모음의 구성 드롭다운 스크린샷 구성 관리... 가 선택되어 있습니다.

    CMake 설정 편집기가 열립니다. 편집기의 왼쪽에서 녹색 더하기 기호를 선택하여 새 구성을 추가합니다. CMakeSettings에 구성 추가 대화 상자가 나타납니다.

    CMakeSettings에 구성 추가 대화 상자의 스크린샷 Linux-Debug, x86-Debug와 같은 항목이 있습니다. x64-Debug가 선택되었습니다.

    이 대화 상자에는 Visual Studio에 포함된 모든 구성과 사용자가 만든 모든 사용자 지정 구성이 표시됩니다. 추가한 첫 번째 구성이어야 하는 x64-Debug 구성을 계속 사용하려는 경우 x64-Debug를 선택한 다음 선택 단추를 선택합니다. Visual Studio는 x64 디버그에 대한 구성을 사용하여 CMakeSettings.json 파일을 만들고 디스크에 저장합니다. CMakeSettings.json이름 매개 변수를 직접 변경하여 구성에 원하는 이름을 사용할 수 있습니다.

Windows에서 중단점 설정, 빌드 및 실행

이 단계에서는 Bullet Physics 라이브러리를 보여 주는 예제 프로그램을 디버깅합니다.

  1. 솔루션 탐색기에서 AppBasicExampleGui를 선택하고 확장합니다.

  2. BasicExample.cpp파일을 엽니다.

  3. 실행 중인 애플리케이션을 클릭할 때 적중되는 중단점을 설정합니다. Click 이벤트는 도우미 클래스 내의 메서드에서 처리됩니다. 신속하게 도착하려면 다음을 수행합니다.

    1. 구조체 CommonRigidBodyBase가 파생된 BasicExample을 선택하십시오. 그것은 줄 30 주위에.

    2. 마우스 오른쪽 단추를 클릭하고 정의로 이동을 선택합니다. 이제 CommonRigidBodyBase.h 헤더에 있습니다.

    3. 사용자는 원본 위의 브라우저 보기에서 CommonRigidBodyBase에 있는 것을 볼 수 있어야 합니다. 오른쪽에서 검사할 멤버를 선택할 수 있습니다. 드롭다운을 열고 헤더에서 해당 함수의 정의로 이동하려면 선택합니다 mouseButtonCallback .

      편집기 창의 구성원 목록 도구 모음 드롭다운 스크린샷 getRayTo(x, int y)와 같은 함수를 나열합니다. 마우스 단추 콜백 메서드가 강조 표시됩니다.

  4. 이 함수 내의 첫 번째 줄에 중단점을 배치합니다. Visual Studio 디버거에서 실행할 때 애플리케이션 창 내에서 마우스 단추를 클릭하면 적중됩니다.

  5. 애플리케이션을 시작하려면 도구 모음에서 시작 드롭다운을 선택합니다. "시작 항목 선택"이라는 녹색 재생 아이콘이 있는 아이콘입니다. 드롭다운에서 AppBasicExampleGui.exe선택합니다. 이제 실행 파일 이름이 시작 단추에 표시됩니다.

    Visual Studio 도구 모음 시작 드롭다운의 스크린샷. AppBasicExampleGui.exe 선택되었지만 App_ExampleBrowser.exe, App_HelloWorld.exe등과 같은 다른 옵션이 표시됩니다.

  6. 시작 단추를 선택하여 애플리케이션 및 필요한 종속성을 빌드한 다음 Visual Studio 디버거가 연결된 상태에서 시작합니다. 잠시 후 실행 중인 애플리케이션이 나타납니다.

    실행 중인 애플리케이션의 스크린샷. 노란색 평면에 색이 지정된 블록의 컬렉션입니다.

  7. 마우스를 애플리케이션 창으로 이동한 다음 단추를 클릭하여 중단점을 트리거합니다. 중단점은 Visual Studio를 다시 포그라운드로 가져오고 편집기에는 실행이 일시 중지된 줄이 표시됩니다. 애플리케이션 변수, 개체, 스레드 및 메모리를 검사하거나 코드를 대화형으로 단계별로 실행할 수 있습니다. 계속을 선택하여 애플리케이션을 다시 시작하고 정상적으로 종료합니다. 또는 중지 단추를 사용하여 Visual Studio 내에서 실행을 중지합니다.

Linux 구성 추가 및 원격 머신에 연결

  1. Linux 구성을 추가합니다. 솔루션 탐색기 보기에서 CMakeSettings.json 파일을 마우스 오른쪽 단추로 클릭하고 구성 추가를 선택합니다. 이전과 동일한 CMakeSettings에 구성 추가 대화 상자가 표시됩니다. 이번에는 Linux-Debug를 선택한 다음, CMakeSettings.json 파일을 저장합니다(ctrl +s).

  2. Visual Studio 2019 버전 16.6 이상 CMake 설정 편집기의 아래쪽으로 스크롤하여 고급 설정 표시를 선택합니다. Unix 메이크파일을CMake 생성기로 선택한 다음, CMakeSettings.json 파일(ctrl+s)을 저장합니다.

  3. 구성 드롭다운에서 Linux-Debug 를 선택합니다.

    시작 구성 드롭다운의 스크린샷. 표시되는 옵션은 x64-Debug, Linux-Debug 및 구성 관리입니다.

    Linux 시스템에 처음 연결하는 경우 원격 시스템에 연결 대화 상자가 나타납니다.

    Visual Studio 원격 시스템에 연결 대화 상자의 스크린샷.

    대화 상자에는 호스트 이름, 포트, 사용자 이름, 인증 유형 및 암호에 대한 필드가 있습니다. 포트가 22로 설정되고 인증 유형이 암호로 설정된 것을 제외하고 모든 필드는 비어 있습니다.

    원격 연결을 이미 추가한 경우 도구 > 옵션 > 플랫폼 > 간 연결 관리자로 이동하여 이 창을 열 수 있습니다.

  4. Linux 컴퓨터에 연결 정보를 제공하고 연결을 선택합니다. Visual Studio는 해당 컴퓨터를 Linux-Debug에 대한 기본 연결로 CMakeSettings.json에 추가합니다. 또한 원격 컴퓨터에서 헤더를 끌어오므로 해당 원격 연결과 관련된 IntelliSense를 가져옵니다. 다음으로, Visual Studio는 원격 머신에 파일을 보내고 원격 시스템에 CMake 캐시를 생성합니다. 이러한 단계는 네트워크 속도 및 원격 컴퓨터의 전원에 따라 다소 시간이 걸릴 수 있습니다. CMake 출력 창에 "대상 정보 추출 완료" 메시지가 표시되면 완료된 것입니다.

Linux에서 중단점 설정, 빌드 및 실행

데스크톱 애플리케이션이므로 디버그 구성에 몇 가지 추가 구성 정보를 제공해야 합니다.

  1. CMake 대상 보기에서 AppBasicExampleGui를 마우스 오른쪽 단추로 클릭하고 디버그 및 시작 설정을 선택하여 숨겨진 .vs 하위 폴더에 있는 launch.vs.json 파일을 엽니다. 이 파일은 개발 환경에 로컬입니다. 체크 인하여 팀과 함께 저장하려는 경우 프로젝트의 루트로 이동할 수 있습니다. 이 파일에서 AppBasicExampleGui에 대한 구성이 추가되었습니다. 이러한 기본 설정은 대부분의 경우 작동하지만 여기서는 작동하지 않습니다. 데스크톱 애플리케이션이므로 Linux 컴퓨터에서 볼 수 있도록 프로그램을 시작하기 위해 몇 가지 추가 정보를 제공해야 합니다.

  2. Linux 컴퓨터에서 환경 변수 DISPLAY 의 값을 찾으려면 다음 명령을 실행합니다.

    echo $DISPLAY
    

    AppBasicExampleGui에 대한 구성에는 매개 변수 배열 "pipeArgs"가 있습니다. "${debuggerCommand}" 줄이 포함되어 있습니다. 원격 컴퓨터에서 시작하는 gdb 명령입니다. Visual Studio는 해당 명령을 실행하기 전에 디스플레이를 이 컨텍스트로 내보내야 합니다. 예를 들어 표시 값이 있는 :1경우 다음과 같이 해당 줄을 수정합니다.

    "export DISPLAY=:1;${debuggerCommand}",
    
  3. 애플리케이션을 시작하고 디버그합니다. 도구 모음에서 시작 항목 선택 드롭다운을 열고 AppBasicExampleGui를 선택합니다. 다음으로 도구 모음에서 녹색 재생 아이콘을 선택하거나 F5 키를 누릅니다. 애플리케이션 및 해당 종속성은 원격 Linux 머신에 빌드된 다음 Visual Studio 디버거를 연결하여 시작됩니다. 원격 Linux 머신에 애플리케이션 창이 표시됩니다.

  4. 응용 프로그램 창으로 마우스를 이동하고 단추를 클릭합니다. 중단점이 적중되었습니다. 프로그램 실행이 일시 중지되고 Visual Studio가 포그라운드로 돌아오면 중단점이 표시됩니다. Visual Studio에도 Linux 콘솔 창이 표시됩니다. 이 창은 원격 Linux 컴퓨터의 출력을 제공하며 , 에 대한 stdin입력을 수락할 수도 있습니다. Visual Studio 창과 마찬가지로 원하는 위치에 도킹할 수 있습니다. 해당 위치는 향후 세션에서 유지됩니다.

    Visual Studio Linux 콘솔 창의 스크린샷.

    창의 출력은 dlopen/dlsym을 사용하여 동적으로 로드된 C11 함수가 정상이고, GL 3.0 컨텍스트가 생성되었으며, Direct GLX 렌더링 컨텍스트를 가져오고 현재 상태로 만들었음을 나타냅니다. 창에는 GL_VENDOR, GL_VERSION, GL_SHADING_LANGUAGE_VERSION 등에 대한 다양한 버전 정보가 있습니다.

  5. Visual Studio를 사용하여 애플리케이션 변수, 개체, 스레드, 메모리를 검사하고 코드를 대화형으로 단계별로 실행할 수 있습니다. 하지만 이번에는 로컬 Windows 환경 대신 원격 Linux 컴퓨터에서 모든 작업을 수행합니다. 계속을 선택하여 애플리케이션을 정상적으로 다시 시작하고 종료하도록 하거나 로컬 실행과 마찬가지로 중지 단추를 선택할 수 있습니다.

  6. Visual Studio가 Linux에서 애플리케이션을 시작한 이후 호출 스택 창을 보고 x11OpenGLWindow에 대한 호출을 확인합니다.

    Linux 호출 스택을 보여 주는 Visual Studio 호출 스택 창입니다.

    호출 스택은 CommonRigidBodyBase::mouseMoveCallback 메서드의 중단점과 그에 앞서 실행된 호출들, 예를 들어 OnMouseMove, X11OpenGLWindow::pumpMessage 등을 표시합니다.

학습 내용

이 자습서에서는 GitHub에서 직접 코드 베이스를 복제했습니다. Windows에서 수정 없이 빌드, 실행 및 디버그했습니다. 그런 다음, 약간의 구성 변경과 함께 동일한 코드 베이스를 사용하여 원격 Linux 머신에서 빌드, 실행 및 디버그했습니다.

다음 단계

Visual Studio에서 CMake 프로젝트를 구성하고 디버깅하는 방법에 대해 자세히 알아봅니다.