IT 공부/Visual Studio 툴 사용하기9 [Visual Studio] - Ctrl+F5 실행과, 직접 실행의 차이 (작업 디렉터리 설정) ▷ 프로그램이 사운드나 픽셀 스프라이트 등 외부 에셋을 사용하는 경우, 에셋의 경로를 설정해야 한다. 프로그래밍 언어와 상관 없이 많은 프로그램이 디스크에서 파일을 읽어올 때 파일 위치의 경로를 문자열로 전달해 파일을 Load한다. ▷ 이때 절대 경로가 아닌 상대 경로로 파일의 위치를 지정하는 경우가 보편적인 것 같다. 절대 경로로 설정해버리면 사용자가 프로그램을 정확한 위치에 둬야 하기 때문이다. 하지만 상대 경로의 문제는 어디를 시작 디렉터리로 생각하느냐에 따라 결과가 달라지기 때문에 주의를 기울여야 한다. ▷ 특히 디버깅을 하거나 Visual Studio에서 Ctrl + F5 단축키로 실행할 때는 잘 되는데, 빌드된 결과물(exe)을 더블 클릭하면 에셋을 불러오지 못하는 경우가 있다. 왜냐하면 전.. 2025. 1. 3. [Visual Studio] - 팁) 환경변수에 등록하지 않고 VS 도구 사용하기 ▷ Visual Studio를 설치하면 여러 빌드 도구들을 제공해준다. MSBuild는 기본이고, 여기에 컴파일러(cl.exe), 링커(link.exe) 등이 있다. ▷ NMake와 같은 Make 기반의 빌드툴도 제공해준다. ※ Make는 빌드 프로그램인데, 보통 리눅스/유닉스 환경에서 MakeFile 이라는 설정 텍스트 파일을 기반으로 빌드를 하는 프로그램이다. 이걸 Windows에서도 비슷한 형식으로 지원해주기 위해 Microsoft가 만들어 Visual Studio와 함께 배포해준 것이다. ※ 다만 NMake는 Make와 사용 방법이 엇비슷할 뿐, 리눅스의 MakeFile과 내용이 다를 수 밖에 없다. 같은 MakeFile이라도 Windows의 NMake와 리눅스의 Make가 동시에 동작할 수.. 2024. 12. 28. [Visual Studio] - MSBuild 도구와 sln, vcsproj 파일 - 개발자의 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\.. 2024. 12. 26. [Visual Studio] - 문자 집합 옵션과 UNICODE 매크로 #1. [문자 집합] 옵션은 문자열의 인코딩과 별개다. ▷ 프로젝트 속성 페이지에는 위와 같이 [문자 집합] 설정 옵션이 있다. 여기서 대부분의 Visual Studio 프로젝트는 기본값으로 "유니코드 문자 집합 사용"이 선택된다. ▷ 예전에 나는 이것을 오해하여, 유니코드 문자 집합을 사용하니까 소스코드의 문자열이 UTF-16으로 인코딩되는 건가? 라고 생각했다. 그러나 문자열이 어떻게 인코딩되어 있는지 빌드된 실행 파일의 바이너리를 살펴보면 유니코드와 전혀 상관 없이 인코딩된 모습을 볼 수 있다. ▷ "hello한글"이라는 문자열이 위와 같이 인코딩되었다. 이것은 유니코드가 아니라 CP949다. 이와 관련한 내용을 자세히 포스팅한 링크를 보자 → (링크).. 요약하자면 문자열("")은 MSVC가 .. 2024. 12. 26. [Visual Studio] - CRT 런타임 라이브러리의 빌드 방식 #1. 의문 : 링커는 어떻게 C/C++ 표준 라이브러리를 찾는가? ▷ Visual Studio 즉, MSBuild 환경에서 컴파일러에게 외부의 정적 라이브러리를 연결하는 방식은 간단히 요약해 아래와 같다. 1) [추가 포함 디렉터리]에 헤더파일의 경로를 추가한다. 2) 라이브러리의 경로를 링커에게 알려준다. 보통 [추가 라이브러리 디렉터리]에 추가한다. 3) 라이브러리의 이름을 링커에게 알려준다. 보통 [추가 종속성]에 추가한다. ▷ 위와 같은 방식으로 MSBuild는 컴파일러(cl.exe)와 링커(link.exe)를 동작시킨다. C/C++ 표준 라이브러리나 Windows SDK 관련 헤더 파일은 환경 변수 INCLUDE(포함 디렉터리)에 실제로 존재한다. 헤더 파일을 찾는 것은 문제가 없다. ▷ 외부.. 2024. 12. 26. [Visual Studio] - #include 따옴표(")와 꺾쇠(<>)의 차이 1) 와 같은 표준 라이브러리의 헤더 파일들은 도대체 어디서 가져오는 것이냐?2) , 와 같은 윈도우즈 개발 시 사용하는 헤더 파일들은 도대체 어디서 가져오냐?3) 내가 만든 라이브러리의 헤더파일, 혹은 다른 사람이 만든 헤더 파일을 로 가져오고 싶다면?- 기준 : Visual Studio Community 2022 버전. - 그러나 내 생각에는, VS의 버전이 달라도 큰 틀에서 기능이 크게 다르진 않을 것이라 생각한다. #1. include 꺾쇠() ▷ 설정을 따로 건드리지 않았다면, #include 같이 꺾쇠()로 표현되는 헤더파일에 대해 VS(MSBuild)는 기본적으로 [VC++ 디렉터리] - [포함 디렉터리]에 설정된 디렉터리 경로부터 검색하며 헤더 파일을 찾아 전처리를 수행한다. ▷ 포.. 2024. 12. 24. [Visual Studio] - 정적 라이브러리와 같이 빌드하기 ※ 정적 라이브러리를 제대로 가져오려면 헤더 파일도 제대로 가져와야 동작한다. 아래의 포스트를 참고.)의 차이" data-og-description="1) 와 같은 표준 라이브러리의 헤더 파일들은 도대체 어디서 가져오는 것이냐?2) , 와 같은 윈도우즈 개발 시 사용하는 헤더 파일들은 도대체 어디서 가져오냐?3) 내가 만든 라이브러리의 헤더파" data-og-host="linocraft.tistory.com" data-og-source-url="https://linocraft.tistory.com/216" data-og-url="https://linocraft.tistory.com/216" data-og-image="https://scrap.kakaocdn.net/dn/b1tS52/hyXOgdBulA/x.. 2024. 12. 24. [Visual Studio] - 소스파일과 빌드 산출물을 깔끔하게 구성하는 방법 - Microsoft의 Visual Studio(IDE)는 빌드 산출물을 다소 복잡하게 구성하는 편이다. (주관적)- 따라서 옵션을 조정해 빌드 결과를 깔끔하게 정리해본다.- 내용이 사실 굉장히 주관적일 수 있다.- 원칙은 간단하다. 분류가 내 마음에 들지 않거나, 나에게 필요하지 않으면 과감하게 삭제하자는 것!!- vcxproj.filter는 무슨 파일인가? 1) 정말로 쓸모가 있는 분류인가? ▷ 화면에 윈도우 창을 하나 출력하는 아주 간단한 프로젝트를 VS에서 생성하면 아래와 같이 배치된다. ▷ VS가 자동으로 만들어준 기초적인 템플릿이다. 많은 파일들이 있으나 VS는 이 파일들을 [리소스 파일], [소스 파일], [헤더 파일]로 분류해준다. [외부 종속성]은 프로젝트가 의존하고 있는 라이브러리.. 2024. 12. 23. [Visual Studio] - 소스코드를 가져오거나 컴파일할 때 한글 인코딩 문제 1) Visual Studio의 소스코드 편집기의 인코딩을 UTF-8로 변경할 수 있다.2) 컴파일러에게 소스코드의 인코딩이 UTF-8이라고 설정할 수 있다. #1. VS의 인코딩 문제 ▷ 인코딩 문제는 어떤 프로그래밍 언어를 사용하든 한 번쯤은 만날 수 밖에 없는 오류다. ▷ 외부에서 가져온 소스코드를 나의 Visual Studio로 열면 가끔 위와 같은 에러 메시지가 뜬다. 이것은 해당 소스코드가 UTF-8로 인코딩한 파일인데, VS가 기본적으로 로컬 시스템의 환경인 CP949로 텍스트 편집기를 설정하므로 CP949 관점에서 식별 불가능한 데이터를 만나 무슨 문자인지 해석이 안 된다는 뜻이다. 즉, UTF-8로 저장한 바이트 값 중 일부가 CP949에서 약속되지 않은 불명의 값이라 에러를 뱉은 .. 2024. 12. 21. 이전 1 다음