[Powered by Google Translate] [Gør, Dunk]
[Nate Hardison] [Harvard University]
[Dette er CS50] [CS50.TV]
Så lad os sige, at jeg har skrevet et lille C-program til at udskrive ordene "Hello, world!"
og jeg har gemt den i en fil kaldet hello.c.
Hvordan kan jeg faktisk køre dette program?
Hvis jeg bare prøve at køre. C fil, det er ikke at gå på arbejde.
>> Computeren vil ikke behandle det som et C-program som jeg bestemt.
Det viser sig, at selv om C-kode ser temmelig kryptisk i starten,
det er stadig ikke lavt niveau nok for computere at forstå det.
Før du kan køre C-kode på en computer, skal du først at kompilere det,
der forvandler din C-kode til maskinkode,
der - som navnet antyder - er et binært format at maskinen kan forstå.
>> Den nemmeste måde at gøre dette på er at bare bruge en kommando kaldet "make".
Lav er et værktøj til udarbejdelse af kildekode.
Det er ikke en compiler selv, men snarere et program, der organiserer kald af oversætteren
på kildekodefiler, så tingene bliver samlet i den rigtige rækkefølge
og på den rigtige måde, da kompiler-flag kan få slags komplicerede, som vi vil se.
Det er især nyttigt, når du arbejder med store projekter med masser af kildekodefiler
og mange forskellige biblioteker.
Men det er også rart at bruge det, når du bare arbejder med en enkelt fil.
Så lad os samle denne "Hello, world!" Program ved hjælp af lave.
Navnet på min kilde kode filen er hello.c, så jeg vil skrive make hej,
og gøre vil bruge sin standardopsætning at kompilere den.
>> Forudsat alt går vel, kan jeg bruge kommandoen ls at liste alle filer i mappen,
og jeg skal se en ny fil kaldet "hej".
Denne fil kaldes en "eksekverbar"
og det er i det binære format, som computeren kan forstå.
Hvis vi åbner det op, kan vi se nogle tegn, som vi kan forstå,
men for det meste er det bare en flok mumbo-jumbo.
Men kan jeg køre denne fil og se det udskrive ud "Hello, world!" igen og igen.
>> Åh, spændingen!
Så lad os gå lidt tilbage til vores make kommando og se, hvad der egentlig skete
for at frembringe den eksekverbare fil.
Du kan se, at når jeg kørte gøre, det udskrives denne linje
begynder med "klang" og slutter med "hello".
Dette er at gøre påberåbelse af oversætteren - i dette tilfælde hedder "Dunk"
med en flok standardflag eller optioner med henblik på at producere vores eksekverbar.
>> Klang er én af en række af C-compilere ude i verden.
Du har måske hørt eller anvendes andre dem,
især en der hedder "gcc", der er specielt udbredt.
Vi har valgt at bruge Dunk i CS50, fordi vi mener, det gør et virkelig godt stykke arbejde
at give personer advarsler og fejlmeddelelser
og fordi brugen er meget lig med gcc,
så du kan temmelig nemt skifte mellem de to.
>> Hvornår gør kørte Dunk, det løb det med en hel masse muligheder.
Men det er ikke nødvendigt at bruge alle disse muligheder
til bare udarbejde en enkelt. c. kildekode-fil.
Alt hvad jeg behøver at gøre er at bruge klang hello.c.
Igen, hvis alt går vel, dette giver en eksekverbar fil.
Men hvis jeg forsøger at køre. / Hej, jeg får en fejl at sige, at der er ikke sådan fil eller mappe.
Hvad er der sket?
Klang af standardnavne sin eksekverbare a.out,
som vi se, om vi liste telefonbogen med ls.
Denne fil kan vi løbe, og det vil også printe ud "Hello, world!" efter hensigten.
>> Hvis vi ønsker at omdøbe den eksekverbare,
vi kan bruge kommandoen Flyt til at gøre det,
men det meste af den tid, vi vil bare Dunk at gøre det ordentlig navngivning for os.
Vi kan gøre dette med-o flag.
Hvis jeg kører klang hello.c-o hej,
så jeg får en eksekverbar navn "hej".
The-o option er super fælles, så forvente at se og bruge det en masse.
De næste klang indstillinger, du vil se en masse begynde med-W.
Disse valgmuligheder styrer hvilke typer af advarsler Dunk giver dig om din kode.
For eksempel kan Dunk advare dig, hvis du angiver en variabel, der er aldrig brugt.
Hvis jeg sætte en int variabel kaldet x er hello.c
og derefter kompilere med Dunk-Wunused-variabel hello.c-o hej,
Klang advarer mig om denne ubrugte variabel i min kode.
>> Nu er der et væld af forskellige advarsler typer,
og det ville være klamt at skulle nævne dem alle ud, når du kører Dunk.
I stedet er der en genvej mulighed for at slå dem alle på --Wall.
Vi har dette slået til som standard, når du kører gøre i apparatet,
så du får alle de advarsler om, at Dunk kan give dig om din kode.
Generelt er at have din kode producere compilation advarsler ikke en god ting,
og vi vil forvente, de programmer, som du skriver for CS50 at advare gratis.
Men som du kan se, vil Dunk stadig producere en eksekverbar fil
selv om der advarer ved opstillingstidspunktet processen.
Vi kan dog tvinge Dunk at stoppe indsamlingen og producere en fejl
hvis den støder på noget værd en advarsel i koden.
Vi gør dette med-Werror mulighed.
>> Nu, hvis jeg kompilere min hello.c fil med de ubrugte int variable x,
Jeg vil ikke få en eksekverbar fil.
Nu kan jeg ikke ignorere compilation advarsler.
Jeg er nødt til at gå ordne min kode.
En anden vigtig mulighed er-ggdb.
Dette muliggør special debugging information i den eksekverbare fil,
så jeg kan køre debugger, gdb, hvis det går ned.
Uden denne mulighed, kan jeg ikke få adgang til en stor del af mit program informations inden gdb,
ligesom variable og funktion navne,
så det er vigtigt at medtage-ggdb, også.
Når du kører gøre på apparatet, er denne mulighed også medtages som standard.
>> Den sidste mulighed, at det er vigtigt at vide om er-l,
som bruges til at forbinde bibliotekerne i din kode.
For eksempel, hvis du ønsker at bruge funktioner fra CS50 biblioteket, ligesom GetString
du nødt til at sørge for, at ikke nok med at du # include bibliotekets header fil, CS50.h,
i din. c. kildekode fil
men også, at du bruger-lcs50 ved udarbejdelsen,
således at biblioteket gennemførelse er forbundet med dit program.
Lad os ændre hej verden program til at bede brugeren om et navn med GetString funktion
og derefter bruge navnet i vores hej streng.
>> Nu, hvis vi forsøger at kompilere dette program o ved hjælp af-lcs50,
vi får en fejl omkring en udefineret reference til GetString.
Uh oh! Lad os tilføje i-lcs50, og nu alt fungerer fint.
>> En gotcha er, at det gør en forskel, hvor i den kommando, du skriver-lcs50.
Hvis jeg skriver det, før jeg skriver hello.c, så CS50 bibliotek er indlæst og behandles
før min kildekode.
Så det er som om jeg ikke skrive-lcs50 overhovedet.
Som en tommelfingerregel, vil du generelt ønsker at sætte alle dine-l optioner
i slutningen af ​​din kommando.
Så lad os nu sætte det hele sammen.
Klang-ggdb-Wall-Werror hello.c-lcs50-o hej -
der er en masse ting.
>> Det er derfor, fabrikat, er så hjælpsomme. Det tager sig af alt dette for dig.
>> Så nu har du en god idé om, hvad der går ind kompilere din kode.
Mit navn er Nate Hardison. Det er CS50.
[CS50.TV]