-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathDirectory.Build.props
More file actions
67 lines (56 loc) · 3.54 KB
/
Copy pathDirectory.Build.props
File metadata and controls
67 lines (56 loc) · 3.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
<?xml version="1.0" encoding="utf-8"?>
<!--
솔루션 전체에 자동으로 걸리는 속성 파일이다. MSBuild가 프로젝트 디렉터리에서
위로 올라가며 처음 만나는 이 파일을 프로젝트보다 먼저 임포트한다 —
vcxproj 여덟 개를 각각 고치지 않아도 되는 유일한 자리다.
── EngineAsan ──
AddressSanitizer 구성을 솔루션 구성(Debug|Release)으로 늘리지 않고 스위치로 뒀다.
구성을 늘리면 vcxproj 여덟 개 × ItemDefinitionGroup을 전부 복제해야 하고,
그렇게 늘어난 구성은 아무도 갱신하지 않아 곧 실제 빌드와 어긋난다.
msbuild CreatorEngine.sln /p:Configuration=Debug /p:Platform=x64 /p:EngineAsan=true
실제 컴파일 옵션은 Directory.Build.targets가 정한다. 여기서 정하면 프로젝트가
자기 ItemDefinitionGroup으로 덮어쓰므로(임포트 순서상 프로젝트가 뒤다) 무력화된다.
-->
<Project>
<PropertyGroup>
<EngineAsan Condition="'$(EngineAsan)' == ''">false</EngineAsan>
<!--
$(SolutionDir)는 .sln 경유 빌드에서만 정의된다. vcxproj를 단독 빌드하면
미정의라 "$(SolutionDir)EngineOutput.props" 임포트부터 무너져, 지금까지
단독 프로젝트 빌드가 불가능했다. 두 .sln 모두 이 파일과 같은 폴더에
있으므로 여기가 곧 솔루션 디렉터리다 — 미정의일 때만 채운다.
(MSBuildThisFileDirectory는 후행 백슬래시를 포함해 관례와 같다)
-->
<SolutionDir Condition="'$(SolutionDir)' == ''">$(MSBuildThisFileDirectory)</SolutionDir>
<!--
── vcpkg 매니페스트 모드 (PHASE 4-6) ──
켜지 않으면 vcpkg.json은 아무 일도 하지 않는다. vcpkg의 MSBuild 통합은
매니페스트를 기본으로 쓰지 않고, 파일만 있으면 "켜시겠습니까" 안내만
낸다(vcpkg.targets 130행).
켜면 의존 해석이 사용자 전역 설치(vcpkg\installed\)에서 저장소 안의
vcpkg_installed\로 옮겨진다. 무엇이 어느 판본으로 들어오는지가
vcpkg.json + builtin-baseline 두 줄로 고정되므로, 새 환경에서
"내 기계에선 되는데"가 나올 자리가 사라진다.
대가: 저장소별 설치 트리 1.5GB(.gitignore에 있다). 시간은 vcpkg의
바이너리 캐시가 있느냐로 갈린다 — 캐시가 빈 첫 환경은 소스에서 빌드해
오래 걸리고(실측 38분), 캐시가 차 있으면 통째로 지웠다 다시 받아도
26초다(실측). 즉 반복 비용이 아니라 환경당 1회 비용이다.
-->
<VcpkgEnableManifest>true</VcpkgEnableManifest>
</PropertyGroup>
<!--
── DirectXTK 를 DLL 로 쓴다 ──
vcpkg 의 directxtk 포트는 x64-windows(동적) 트리플릿에서 DLL 을 낸다.
그러면 SimpleMath 의 Vector3::Zero 같은 정적 상수가 임포트 심볼
(__imp_...)로만 존재하므로, 소비하는 쪽이 DIRECTX_TOOLKIT_IMPORT 를
정의해 헤더가 dllimport 를 붙이게 해야 한다.
CMake 로 쓰면 Microsoft::DirectXTK 타깃이 이것을 자동으로 붙여 주지만
MSBuild 는 그런 것이 없다 — 그래서 여기서 한 번에 세운다. 프로젝트마다
적으면 빠뜨린 프로젝트만 링크가 깨지고, 그 증상이 '왜 얘만'이 된다.
-->
<ItemDefinitionGroup>
<ClCompile>
<PreprocessorDefinitions>DIRECTX_TOOLKIT_IMPORT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
</ItemDefinitionGroup>
</Project>