﻿1
00:00:04,370 --> 00:00:05,630
‫Hallo en welkom.

2
00:00:05,630 --> 00:00:13,160
‫In deze lezing gaan we de belangrijkste stappen begrijpen die betrokken zijn bij het compileren van C++-bestanden in

3
00:00:13,160 --> 00:00:13,730
‫Unreal.

4
00:00:13,940 --> 00:00:15,770
‫Laten we erin duiken en kijken hoe ze werken.

5
00:00:16,910 --> 00:00:23,990
‫Dus het wordt binnenkort tijd dat we code van buitenaf gaan gebruiken, van andere bestanden, en we moeten

6
00:00:23,990 --> 00:00:26,720
‫leren hoe dit werkt in C++.

7
00:00:26,720 --> 00:00:31,190
‫Om dat te doen, moeten we een kleine omweg maken en in meer detail begrijpen

8
00:00:31,190 --> 00:00:35,240
‫wat er aan de hand is wanneer we onze C++-code in binair compileren.

9
00:00:35,240 --> 00:00:38,390
‫Dus hier zijn de compilatiestappen die worden gebruikt.

10
00:00:38,750 --> 00:00:44,450
‫We beginnen met uw code, uw C++-bestanden, uw hoofd van bestanden, allemaal in verschillende tekstbestanden.

11
00:00:44,900 --> 00:00:49,010
‫Deze worden ingevoerd in een tool genaamd de Unreal Handed Tool.

12
00:00:49,010 --> 00:00:56,210
‫Nu is deze tool verantwoordelijk voor het nemen van alle onwerkelijke specifieke stukken syntaxis en deze gebruiken

13
00:00:56,210 --> 00:00:58,490
‫om meer C++-code te genereren.

14
00:00:58,910 --> 00:01:05,480
‫Laten we eens kijken naar enkele voorbeelden van waar we deze onwerkelijke specifieke syntaxis hebben, deze nieuwe

15
00:01:05,540 --> 00:01:13,640
‫klasse in hoofdletters die een onwerkelijke specifieke syntaxis is, en dat geldt ook voor het Crypt Reader API-ding hier en het

16
00:01:13,640 --> 00:01:15,170
‫gegenereerde lichaam daar.

17
00:01:15,530 --> 00:01:21,770
‫En wat hier eigenlijk aan de hand is, is dat de onwerkelijke header-tool deze verschillende stukjes syntaxis in je code zal

18
00:01:21,770 --> 00:01:24,470
‫zien en gaan, oké, ik moet mijn werk doen.

19
00:01:24,470 --> 00:01:26,810
‫Ik moet daar naar binnen, ik moet een heleboel dingen toevoegen.

20
00:01:27,080 --> 00:01:33,710
‫Het gaat je gegenereerde lichaam vervangen door een heleboel code die ons leven gemakkelijker maakt bij het gebruik

21
00:01:33,710 --> 00:01:34,460
‫van Unreal.

22
00:01:35,060 --> 00:01:38,240
‫Het doet ook dingen als de U-eigenschappen en U-functies.

23
00:01:38,240 --> 00:01:43,340
‫Het voegt alle dingen toe die het nodig heeft, zodat het kan communiceren met de blauwdrukwereld.

24
00:01:43,730 --> 00:01:44,960
‫Dat is dus de eerste stap.

25
00:01:44,960 --> 00:01:49,010
‫Het zet al zijn onwerkelijke specifieke dingen om in echte C++.

26
00:01:49,580 --> 00:01:55,820
‫Zodra we de daadwerkelijke C++ hebben, kunnen we deze in een standaard C++-compilatieproces invoeren, dat drie

27
00:01:55,820 --> 00:01:56,990
‫stappen duurt.

28
00:01:57,380 --> 00:02:04,370
‫De eerste is om de voorbewerkingsstap af te handelen, dus dit zal eigenlijk een van de C++-syntaxis raken en heeft eigenlijk alleen

29
00:02:04,640 --> 00:02:07,580
‫betrekking op regels die met een hash beginnen.

30
00:02:07,580 --> 00:02:10,610
‫Dus we hebben een paar van deze preprocessing-richtlijnen.

31
00:02:10,940 --> 00:02:13,220
‫Deze worden afgehandeld door de preprocessor.

32
00:02:14,120 --> 00:02:16,610
‫De volgende stap is wat we eigenlijk de compiler noemen.

33
00:02:16,880 --> 00:02:24,620
‫Er is een code voor nodig en het zet het om in uitvoerbaar binair bestand, maar het voltooit de stap

34
00:02:24,620 --> 00:02:31,640
‫niet helemaal omdat het het alleen doet op individuele C++, wat bekend staat als vertaaleenheden, in feite C++-bestanden.

35
00:02:31,880 --> 00:02:37,670
‫Er is dus een C++-bestand voor nodig en het vertaalt dat afzonderlijk naar binair, elk afzonderlijk C++-bestand.

36
00:02:38,000 --> 00:02:44,300
‫En dan is de derde stap de linker, die dat alles bij elkaar brengt en een uitvoerbaar bestand oplevert dat

37
00:02:44,300 --> 00:02:46,850
‫we eigenlijk één uitvoerbaar bestand kunnen uitvoeren.

38
00:02:47,330 --> 00:02:53,540
‫Laten we deze standaard compilatiestappen eens wat gedetailleerder bekijken met een voorbeeldbestand.

39
00:02:53,990 --> 00:03:00,200
‫Dus stel je voor dat we een spel dot CP hadden en het is een heel, heel eenvoudig spel omdat het alleen één en één

40
00:03:00,200 --> 00:03:01,160
‫bij elkaar optelt.

41
00:03:01,640 --> 00:03:07,790
‫Maar om één en één bij elkaar op te tellen, moet hij een functie gebruiken die in een ander bestand in de wiskunde

42
00:03:07,790 --> 00:03:08,630
‫twee is gedeclareerd.

43
00:03:08,690 --> 00:03:13,850
‫H Dus de wiskunde verklaart advertentie, maar het definieert niet echt wat het doet.

44
00:03:14,240 --> 00:03:16,790
‫Dus dat wordt gedaan in de stap van de wiskundige punt.

45
00:03:16,790 --> 00:03:19,250
‫En je kunt zien dat het inderdaad een heel eenvoudige implementatie is.

46
00:03:20,090 --> 00:03:22,640
‫Wat gebeurt er nu in de pre-processing stap?

47
00:03:22,640 --> 00:03:28,040
‫Zoals ik al zei, het behandelt alle preprocessor-richtlijnen, die dingen zijn die met een hash

48
00:03:28,040 --> 00:03:28,610
‫beginnen.

49
00:03:28,610 --> 00:03:34,700
‫Dus de hash bevat wiskunde, wat in feite betekent dat je alles in Master H hierheen kopieert.

50
00:03:35,120 --> 00:03:40,640
‫Dus wat het doet, is dat het deze twee bestanden nodig heeft en het combineert ze samen om een nieuw uitvoerbestand

51
00:03:40,640 --> 00:03:46,190
‫te maken met de naam game dot I eigenlijk game om op te nemen en je kunt zien dat het is inbegrepen.

52
00:03:46,490 --> 00:03:52,700
‫De definitie van masturbatie heeft de hash preprocessor-richtlijn vervangen.

53
00:03:52,700 --> 00:04:02,540
‫Dus nu heeft game dot II een definitie voor de add-operatie en dan draaien we de preprocessor op math dot

54
00:04:02,540 --> 00:04:03,170
‫CVP.

55
00:04:03,170 --> 00:04:07,490
‫Maar omdat het geen preprocessor-richtlijnen heeft, wordt daar in principe niets veranderd.

56
00:04:08,150 --> 00:04:12,830
‫De volgende stap is dat de compilatie waarschijnlijk de belangrijkste en meest

57
00:04:12,830 --> 00:04:21,290
‫gecompliceerde stap is, want wat het doet, is dat C++ in elk afzonderlijk bestand wordt geconverteerd naar binair, maar het is niet

58
00:04:21,290 --> 00:04:28,610
‫volledig binair omdat mijn spel bijvoorbeeld niet echt weet hoe te implementeren en het kent gewoon de vorm

59
00:04:28,850 --> 00:04:30,350
‫van die add-functie.

60
00:04:30,770 --> 00:04:34,940
‫Dat moet dus later ingevuld worden en dat wordt ingevuld door de linker.

61
00:04:34,970 --> 00:04:40,880
‫Dus de link neemt het binaire bestand, maakt het aan voor het spel dot obj-bestand en het binaire bestand

62
00:04:40,880 --> 00:04:47,060
‫dat is gemaakt voor het methodebestand en brengt ze samen om een spel dot xy te maken dat het binaire bestand

63
00:04:47,360 --> 00:04:54,410
‫voor beide combineert en uiteindelijk een compleet uitvoerbaar bestand is dat we kan echt draaien omdat het de definitie heeft voor alles wat het

64
00:04:54,410 --> 00:04:55,040
‫nodig heeft.

65
00:04:55,340 --> 00:04:58,460
‫Waarom hebben we zo'n ingewikkeld proces?

66
00:04:58,820 --> 00:05:02,060
‫Het idee hier is dat het onze compilatietijd versnelt.

67
00:05:02,060 --> 00:05:03,850
‫Want als ik maar een ketting zou maken.

68
00:05:04,340 --> 00:05:06,230
‫Om dot slaap te spelen.

69
00:05:06,770 --> 00:05:10,290
‫Ik hoef eigenlijk niet het hele compilatieproces uit te voeren.

70
00:05:10,310 --> 00:05:16,610
‫Het enige wat ik hoef te doen is de bits draaien met game dot CBP, dus ik zou de preprocessor alleen op de CP draaien.

71
00:05:16,790 --> 00:05:19,280
‫Dan zou ik de compiler alleen op het spel naar I uitvoeren.

72
00:05:19,280 --> 00:05:23,510
‫En dan kan ik het math dot obj-bestand van eerder hergebruiken.

73
00:05:23,690 --> 00:05:26,810
‫Ik hoef het niet opnieuw te compileren, want daarin is niets veranderd.

74
00:05:27,080 --> 00:05:33,170
‫Evenzo, als ik alleen de wiskundige punt CP verander, zou ik het spel niet opnieuw naar het OBJ-bestand hoeven te compileren, daarom

75
00:05:33,170 --> 00:05:37,370
‫is dit een efficiënter proces en waarom doen we het in de eerste plaats.

76
00:05:37,730 --> 00:05:44,330
‫Dus ik zou graag willen dat we een klein experiment doen en proberen uit te vinden waarom we een punt h invoegen

77
00:05:44,330 --> 00:05:46,070
‫en haar punt CP-bestand verplaatsen?

78
00:05:46,370 --> 00:05:47,690
‫Wat is de reden ervoor?

79
00:05:47,700 --> 00:05:52,040
‫Waarom kunnen we het C++-bestand niet gewoon compileren zonder move dot h.

80
00:05:52,340 --> 00:05:56,540
‫Dus het experiment dat we gaan doen, is dat we commentaar gaan geven op de hash include-regel.

81
00:05:56,690 --> 00:06:01,940
‫Dus een dubbele slash gebruiken om een opmerking voor die regel te plaatsen, waardoor het in feite

82
00:06:01,940 --> 00:06:07,280
‫wordt verwijderd door de preprocessor in plaats van dat de preprocessor het vervangt door de inhoud van het

83
00:06:07,280 --> 00:06:07,880
‫bestand.

84
00:06:08,570 --> 00:06:15,020
‫We gaan dan opnieuw compileren en ik zou graag willen dat je de foutmeldingen bekijkt die eruit komen en kijk

85
00:06:15,020 --> 00:06:20,870
‫wat er staat om te zien of je kunt proberen te begrijpen waarvoor we deze verplaatsing opnemen.

86
00:06:21,350 --> 00:06:23,210
‫Pauzeer de video en probeer het.

87
00:06:26,500 --> 00:06:26,980
‫Oké.

88
00:06:26,980 --> 00:06:27,760
‫Welkom terug.

89
00:06:28,150 --> 00:06:33,220
‫Dus laten we een dubbele schuine streep naar voren plaatsen aan het begin van deze regel, waardoor deze in feite nietig

90
00:06:33,220 --> 00:06:33,580
‫is.

91
00:06:34,030 --> 00:06:40,300
‫En dan gaan we een controle alt f 11 doen en gaan we kijken naar de uitvoer van live codering.

92
00:06:40,480 --> 00:06:44,650
‫Dus kijk, we hebben meteen wat fouten, heel, heel vroeg.

93
00:06:44,650 --> 00:06:50,680
‫En wat het zegt is dat je verhuizer geen klasse of naamruimte is en er zijn nog wat andere dingen hier

94
00:06:50,680 --> 00:06:51,070
‫beneden.

95
00:06:51,070 --> 00:06:56,650
‫Het zegt dat de primaire technische component is verklaard dat super is in de klasse of dat de eigenaar van de

96
00:06:56,650 --> 00:06:58,090
‫naamruimte een onbekende identifier is.

97
00:06:58,510 --> 00:07:03,880
‫En eigenlijk wil dit zeggen dat je het hier over je verhuizer hebt gehad, maar je hebt het toch

98
00:07:03,880 --> 00:07:05,860
‫niet gedefinieerd, je hebt het nergens aangegeven.

99
00:07:05,860 --> 00:07:07,150
‫Dus ik weet het niet.

100
00:07:07,180 --> 00:07:11,290
‫De C++ compiler zegt, ik weet niet wat dit is.

101
00:07:11,680 --> 00:07:18,160
‫Dus daarom zijn we hash inclusief de mover dot h omdat move it of H de class declareert.

102
00:07:18,160 --> 00:07:25,720
‫Het zegt dat een U-mover een klasse is en dat het voortkomt uit je act een component en het heeft deze methoden, enz.

103
00:07:25,720 --> 00:07:28,270
‫verklaart wat het betekent om die klasse te zijn.

104
00:07:28,630 --> 00:07:35,260
‫Dus zonder die verklaring kan de C++-compiler niet doorgaan en daarom moeten we dat headerbestand

105
00:07:35,260 --> 00:07:35,920
‫opnemen.

106
00:07:36,760 --> 00:07:37,180
‫Goed spul.

107
00:07:37,180 --> 00:07:44,860
‫Dus hopelijk begrijp je nu een beetje beter het proces dat betrokken is bij het compileren van C++ en in het

108
00:07:44,860 --> 00:07:47,650
‫bijzonder het compileren van C++ in Unreal.

109
00:07:47,920 --> 00:07:49,570
‫Ik zie je in de volgende lezing.

