기술지원 문의는 로그인 후에 가능합니다.

확인

소식

JetBrains 관련 소식

공지사항

CLion, Makefile 프로젝트 공개

2020-07-16

안녕하세요 JetBrains 한국 총판 단군소프트입니다.
오랫동안 기다리셨습니다!
드디어 CLion 2020.2 EAP 2가 Makefile 프로젝트 지원을 선보입니다!
아직 개발 초기 단계이지만, 다양한 프로젝트를 처리하기엔 충분한 기능을 갖추고 있습니다.

Makefile 프로젝트를 보유하고 계신 분은 무료 EAP 빌드를 받아 사용하실 수 있습니다.

그럼 자세한 내용은 아래를 확인해주세요.


내부 작동 방식

CLion Makefile 프로젝트의 내부 작동 방식은 구현 접근 방식입니다. 얼마 전에 JetBrains에서 Makefile 프로젝트를 지원하는 데 활용한 접근 방식을 공개했습니다. 공개된 내용에는 다양한 최신 C++ IDE 및 에디터에서 널리 사용되는 Makefile을 처리하기 위한 방법이 간략히 소개되었습니다.

  1. 실제 컴파일러 호출을 래핑하는 데 컴파일러 래퍼를 활용한 후 전반적 빌드 정리 작업을 수행합니다. 다음으로 프로젝트 정보를 추출합니다.
  2. LD_PRELOAD 환경 변수를 사용하며 모든 빌드 프로세스 실행 전 특정 동적 라이브러리를 로드하여 컴파일러 호출을 인터셉트하고 프로젝트 정보를 수집합니다.
  3. make 명령어의 출력 결과를 파싱합니다. 실제 빌드를 방지하기 위해 --just-print 옵션과 함께 사용하는 경우가 많습니다.


3번째 옵션은 매우 중요한 여러 혜택을 제공합니다.
  • 빌드 프로세스에 영향을 미치지 않습니다.
  • 전체 프로젝트 빌드보다 더 빠르게 정보를 수집할 수 있습니다.
  • 이론상으로는 다른 기기에서 기록된 Make 출력을 활용해 IDE를 시작할 수 있기에 이 옵션은 ‘휴대용” 옵션으로 작동합니다.

따라서 JetBrains는 3번째 접근 방식을 채택하고 프로토타입을 구현했습니다. 또한 Confluence 페이지에서 확인하실 수 있는 것처럼, 다양한 프로젝트에서 테스트를 실행했습니다.

여러분도 직접 Makefile 프로젝트에서 이 방식을 활용하시고 피드백을 보내주세요!

CLion에서 Makefile 프로젝트를 시작하는 방법

CLion에서 Makefile 프로젝트를 여는 방법은 다음과 같습니다.

  1. File | Open(파일 | 열기)에서 프로젝트를 선택하세요.
  2. 폴더를 프로젝트로 열면 CLion에서 최상위 Makefile을 검색하고 프로젝트로 열도록 제안하세요. (CMakeList.txt 또는compile_commands.json 파일도 마찬가지입니다) Open(열기) 대화상자에서 Makefile을 바로 지정할 수도 있습니다.
  3. CLion에서 프로젝트 정리를 요청할 수 있습니다. 정리가 필요한 이유는 Make 빌드가 증분 빌드이며 정리되지 않은 프로젝트에서 실행될 시 업데이트한 파일만이 컴파일되기 때문입니다. 이런 경우 프로젝트 재로드가 적절히 작동하지 않으며 변경되지 않은 모든 파일이 누락될 수 있습니다.
  4. 이제 CLion에서 프로젝트 로드를 시도합니다.
  5. 프로젝트가 성공적으로 로드되면 CLion에서 해당 프로젝트 작업을 시작하고 스마트한 IDE 기능을 모두 활용할 수 있습니다.


기본 설정이 적합하지 않은 경우 중요 설정을 조정할 수 있습니다. Settings/Preferences(설정/환경 설정) | Build, Execution, Deployment(빌드, 실행, 배포) | Makefile setting(Makefile 설정)으로 이동하세요.



변경 가능한 항목은 다음과 같습니다.

  1. 툴체인: Makefile 프로젝트 로드에 사용됩니다. 모든 로컬 툴체인(Clang, GCC, MinGW, Cygwin, WSL)이 지원됩니다. Visual Studio 툴체인은 현재 지원되지 않는 NMake을 기반으로 하지만 GNU Make를 사용해 프로젝트를 빌드할 경우 CLion에서 작동합니다. 원격 모드는 아직 포함되지 않습니다.
  2. 인수: 프로젝트 정보 추출을 위해 CLion의 make 명령어를 호출하는 데 사용됩니다.
  3. 빌드 및 정리: 프로젝트 정보 추출을 위해 CLion의 make 명령어와 함께 대상이 사용되도록 합니다. 빌드 시 공백 필드는 CLion이 프로젝트 Makefile에 지정된 첫 번째 대상을 채택하였음을 의미합니다.
CLion에서 Makefile 프로젝트 작업 시 유용한 최종 팁을 확인해 보세요.

Tip 1: CLion은 Makefile 프로젝트의 대상을 검색하여 Run/Debug configuration(실행/디버그 구성)에서 즉시 사용할 수 있도록 합니다. 또한 CLion에서 Make 대상을 검색하지 못할 경우 Make 유형의 사용자 지정 빌드 대상을 생성하여 구성에 사용할 수 있습니다.



Tip 2: 소스 외부 빌드는 지원되지만, Project View(프로젝트 뷰)에 소스가 적절히 표시되려면 프로젝트 로딩 후 Tools(도구) | Makefile | Change Project Root(프로젝트 루트 변경)을 호출하는 편이 좋습니다.

Tip 3: 현재 CLion은 새 파일 추가 등의 파일 변경이 있을 시 자동으로 프로젝트를 업데이트하거나 다시 로드하지 않습니다. 업데이트 후 Makefile에 알림이 표시되므로 프로젝트 재로드를 잊어버릴 염려가 없습니다. 하지만 구성 단계가 프로젝트에 사용될 경우, Makefile을 업데이트하고 알림을 받으려면 호출이 필요합니다.

오류로 인한 프로젝트 로드 문제 해결법

이슈가 발생했다면 다음과 같은 액션을 활용해 보세요.

  1. Settings/Preferences(설정/환경 설정) | Build, Execution, Deployment(빌드, 실행, 배포) | Makefile setting(Makefile 설정)에서 사용 중인 툴체인을 확인합니다. 선택한 환경에서 프로젝트를 빌드할 수 있어야 합니다.
  2. Settings/Preferences(설정/환경 설정) | Build, Execution, Deployment(빌드, 실행, 배포) | Makefile setting(Makefile 설정)에서 인수 및 빌드 대상 재로드를 확인합니다. 저희 측에서 성공적으로 작동했던 프로젝트 대부분의 경우 기본 인수는 문제가 없었습니다. 하지만 상황에 따라 변경이 필요할 수도 있습니다.
  3. Tools(도구) | Makefile | Clean and Reload Makefile Project(Makefile 프로젝트 정리 및 재로드)를 시도합니다.상단의 단계로도 해결되지 않으면 시스템 디렉토리의 /makefiles에서 프로젝트를 정리해 보세요. 예를 들어, 저의 macOS에서 postgres 프로젝트의 경우 ~/Library/Caches/JetBrains/CLion2020.2/makefiles/postgres.dc29ef09입니다. 이후 프로젝트를 다시 로드합니다.
  4. 마지막으로 혹시 상단의 팁들이 전혀 효과가 없을 경우 Help(도움말) | Diagnostic Tools(진단 도구) | Debug Log Settings…(디버그 로그 설정…)으로 이동하고 #com.jetbrains.cidr.cpp.makefile을 추가해 디버그 로그를 활성화합니다. 다음으로 문제를 재현하고 로그를 트래커 또는 지원팀에 제출해 주세요.

알려진 이슈 및 제약 사항이란?


현재 사용되는 알고리즘의 가장 취약한 지점은 make 명령어 출력에서 컴파일 명령어를 추출하는 것입니다. 일부 사례에서 발생하는 이슈가 발견되었습니다.
  • 프로젝트가 디렉토리 출력을 억제해 알고리즘이 실제 빌드되는 소스 파일을 적절히 탐지하지 못합니다.
  • 알 수 없는 컴파일러 또는 적절히 추출될 수 없는 컴파일 플래그. libtool을 비롯한 다양한 래퍼가 컴파일 플래그를 숨김 처리하고 Make의 출력을 방해하여 상황이 더욱 악화됩니다(CPP-19549, CPP-19305).

이전 테스트 프로젝트에서 경험한 사례와 같은 문제를 해결하기 위해 여러 경험적 지식을 동원하고 있습니다. 또한 사용자가 프로젝트 정보를 추출하는 동안 make 명령어 호출에 사용되는 인수를 제어할 수도 있습니다. Settings/Preferences(설정/환경 설정) | Build, Execution, Deployment(빌드, 실행, 배포) | Makefile | Arguments(인수)로 이동하여 설정하세요.

앞으로 다양한 기능들을 추가하고 개선할 예정입니다. 특히 현재 프로토타입을 개선하고 여러 이슈를 수정할 것입니다 그렇기 때문에 여러분의 피드백은 정말로 중요하고 귀중합니다. 사용 중 이슈가 발생하면 이슈 트래커에 보고해 주세요. 긴 글 읽어주셔서 감사합니다.

목록