< 해소할 수 있는 궁금증 >
- 개발자의 ctrl+s라 불리는 빌드(ctrl+shift+B) 단축키는 도대체 어떻게 동작하는 것일까?
- .sln, .vcxproj 파일에 대해..
#1. Visual Studio와 MSBuild.exe
▷ Visual Studio에서 빌드는 어떻게 동작할까? 예전에 아무것도 모를 때는 그저 컴파일러와 링커를 일일이 호출하는 방식으로 동작하지 않을까 막연히 추측했다. 물론 틀린 말은 아니다. MSVC 컴파일러(cl.exe)와 링커(link.exe)가 빌드에 관여하기 때문이다. Visual Studio를 깔면 보통 아래의 경로에 컴파일러와 링커가 존재한다.
(C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.42.34433\bin\Hostx64\x64)
▷ 하지만 Java Spring, Node.js 등을 찍먹 했을 때 이들 모두 빌드툴을 가지고 빌드를 한 기억이 있다. Visual Studio도 마찬가지다. 컴파일러와 링커를 일일이 Visual Studio가 대신 빌드해주는 것이 아니라, MSBuild라는 빌드 도구를 사용해 빌드를 자동화한다.
▷ 정확하게 표현하면, Visual Studio는 통합 개발 환경(IDE)에 불과하며, 실제로 빌드를 수행하는 주체는 MSBuild다. 이때 MSBuild는 Visual Studio에 종속된 개념이 아니다. 오히려 Visual Studio가 MSBuild 도구와 소스코드 편집기 등의 다양한 도구들을 통합한 입장이므로 msbuild에 의존하는 주체다.
▷ Visual Studio를 설치하면 자동으로 MSBuild도 함께 배포된다. VS가 MSBuild를 사용하기 때문이다. 그러나 MSBuild는 Visual Studio에 종속된 개념이 아니므로, 아래와 같이 공식 문서의 설명대로 MSBuild를 단독으로 다운받아 설치하고 사용해도 상관 없다. (물론 이렇게 쓰는 개발자가 얼마나 있을까 싶다)
▷ Visual Studio가 MSBuild에 의존해 빌드를 수행하고 있다면, 굳이 통합 개발 환경을 통하지 않아도 MSBuild를 단독으로 사용해 빌드도 가능하다는 뜻이다. 먼저 msbuild.exe 위치의 경로를 PATH 환경변수에 등록해 쉽게 msbuild를 커맨드라인에서 호출할 수 있도록 하자.
▷ 이전에 VS에서 작업했던 솔루션의 루트 디렉터리로 가자. 솔루션 디렉터리는 .sln 파일이 있는 위치다. 여기서 cmd를 열어 msbuild를 입력해 실행해보면....
▷ 신기하게도 정말 빌드가 완료되는 모습을 볼 수 있다!
#2. sln과 vcxproj 파일의 정체
▷ Visual Studio에서 프로젝트를 생성하면 위와 같은 파일이 프로젝트마다 개별적으로 생성된다. filters 파일은 Visual Studio에서 소스코드와 리소스 파일을 시각화하기 위해 참조하는 파일이므로 중요하지 않다. users 파일은 개인화된 설정과 관련이 있다. 예를 들어, 디버깅 좌표를 어디에 찍었는지와 같은 정보다. 전혀 중요한 파일이 아니다. 진짜 핵심적인 파일은 vcxproj 파일이다.
▷ 솔루션에 생성되는 sln과 프로젝트 단위로 생성되는 vcxproj 파일은 모두 MSBuild가 인풋으로 받아 빌드를 처리하기 위해 필요한 xml 파일이다. 즉, Visual Studio가 내부적으로 MSBuild를 사용하기 위해 생성하는 파일일 뿐, 이 파일들은 VS가 아니라 MSBuild와 관련이 있는 것이다.
▷ XML 파일을 볼 때마다 나는 항상 숨이 막히는 기분이 드는데, vcxproj 파일도 별반 다르지 않다. 하지만 Visual Studio로 개발하는 환경이라면 이 파일을 직접 타이핑하는 경우는 드물다. 읽기 싫어도 자세히 살펴보면 이 설정들의 정체는 바로...
▷ VS에서 프로젝트의 옵션을 설정할 때 사용했던 바로 이 속성 페이지가 vcxproj에 반영되는 것이다.
▷ 예를 들어, 위와 같이 빌드 시 출력 디렉터리를 설정한 것이 그대로 XML 파일에 적용된 것을 볼 수 있다. 기타 다른 설정도 위와 같이 vcxproj xml 파일 어딘가에 꾹꾹 담겨 있다.
▷ 예전에 자바를 배울 때 사용했던 빌드 방식은 XML을 직접 타이핑하는 경우도 간혹 있었는데 지금 생각하면 그게 어떻게 가능했나 싶다.
'IT 공부 > Visual Studio 툴 사용하기' 카테고리의 다른 글
[Visual Studio] - Ctrl+F5 실행과, 직접 실행의 차이 (작업 디렉터리 설정) (0) | 2025.01.03 |
---|---|
[Visual Studio] - 팁) 환경변수에 등록하지 않고 VS 도구 사용하기 (0) | 2024.12.28 |
[Visual Studio] - 문자 집합 옵션과 UNICODE 매크로 (0) | 2024.12.26 |
[Visual Studio] - CRT 런타임 라이브러리의 빌드 방식 (0) | 2024.12.26 |
[Visual Studio] - #include 따옴표(")와 꺾쇠(<>)의 차이 (1) | 2024.12.24 |