[Powered by Google Translate] [Faru, Clang] [Nate Hardison] [Universitato Harvard] [Jen CS50] [CS50.TV] Do, diru mi skribis iom C programo por printi la vortojn "saluton, mondo!" kaj mi savis ĝin en dosieron nomatan hello.c. Kiel mi vere kuras tiu programo? Se mi nur provas kuri la. C dosiero, ke ne iras al la laboro. La komputilo ne tuj trakti ĝin kiel C programon kiel mi intencis. Rezultas ke kvankam C-kodo aspektas bela kamufla unue, ĝi estas ankoraŭ ne malalta nivelo sufiĉa por komputiloj kompreni ĝin. Antaŭ ol vi povos kuri C-kodo en komputilo, vi unue bezonas kompili ĝin, kiu transformas vian C kodon en maŝino kodo, kiu - kiel lia nomo implicas - estas duargumenta formato kiun la maŝino povas kompreni. La plej facila maniero por fari ĉi tion estas ĝuste uzi komando nomas "fari." Faru estas ilo por kompili fontkodo. Tio ne estas tradukilo mem, sed prefere programo kiu organizas alvokoj de la tradukilo sur fontkodon dosierojn por ke aĵoj get kompilita en la taŭgan ordon kaj en la taŭgan vojon ekde tradukilo flagoj povas akiri ia komplika, kiel ni vidos. Estas aparte utila kiam vi laboras per grandaj projektoj kun multaj fontkodon dosieroj kaj multaj malsamaj bibliotekoj. Sed estas ankaŭ bela uzi ĝin kiam vi ĝuste laborante kun sola dosiero. Do, ni kompilos ĉi "saluton, mondo!" Programo uzanta fari. La nomo de mia fontkodon dosiero hello.c, do mi tajpas fari saluton, kaj faru uzos liajn defaŭlta instalinstrukciojn por kompili ĝin. Supozante ĉiu iras bone, mi povas uzi la komandon ls por listigi ĉiujn dosierojn en la dosierujo, kaj mi devus vidi novan dosieron nomatan "saluton." Ĉi tiu dosiero estas nomita "ruleblan," kaj ĝi estas en la duuma formato kiu la komputilo povas kompreni. Se ni malfermos ĝin, ni povas vidi kelkajn signojn, ke ni povas kompreni, sed plejparte estas nur aro da Mumbo-jumbo. Tamen, mi povas kuri ĉi dosieron kaj rigardi ĝin presi "saluton, mondo!" denove kaj denove. Ho, la ekscito! Do, ni revenu iom al nia Faru komandon kaj vidu kio vere okazis por produkti la ruleblan dosieron. Vi povas vidi ke kiam mi kuris fari, li presas tiun linion  komencante kun "clang" kaj finante per "saluton". Tio faras alpreĝante la tradukilo - en ĉi tiu kazo, oni nomas "Clang" kun amaso de defaŭlta flagoj aŭ eblojn por produkti nian ruleblan. Clang estas unu de nombro de C tradukiloj tie en la mondo. Vi eble auxdis pri aŭ uzitaj aliaj, aparte unu nomita "gcc" tio estas speciale komuna. Ni elektis uzi Clang en CS50, ĉar ni kredas ke ĝi faras vere bonan laboron de havigi helpema avertoj kaj erarmesaĝojn kaj ĉar uzante ĝin estas vere simila al nanta gcc, tiel vi povos bela facile ŝanĝi inter la du. Kiam fari kuris Clang, ĝi kuris ĝin per tuta amaso de ebloj. Tamen, ne estas necese uzi ĉiuj tiuj ebloj  justaj kompili sola. c fontkodon dosiero. Mi nur bezonas fari estas uzi clang hello.c. Denove, se ĉiu iras bone, ĉi tio produktas plenumeblan dosieron. Tamen, se mi provas kuri. / Saluton, mi ricevas erarmesagxon dirante, ke estas nenia tia dosiero aŭ dosierujo. Kio okazis? Clang defaŭlte nomoj lia ejecutables a.out, kion ni vidas se oni printi la dosierujon kun ls. Tiu dosiero povas kuri, kaj estos ankaŭ presi "saluton, mondo!" kiel intencita. Se ni volas renomi la ruleblan, ni povas uzi la movadon komandon por fari tiel, sed plejofte ni volas nur Clang fari la ĝustan nomoj por ni. Ni povas fari ĉi tion kun la-o flago. Se mi kuras clang hello.c-o saluton, tiam mi ricevos plenumeblan nomata "saluton." La-o eblo estas super komuna, do atendus vidi kaj uzi ĝin multe. La venonta Clang ebloj kiujn vi vidos multajn komenci kun-W. Tiuj ebloj kontroli kion specoj de avertoj Clang donas al vi vian kodon. Ekzemple, Clang povas averti vin se vi rakontos variablo kiu neniam uzis. Se mi metis int variablo x estas nomata hello.c kaj poste kompilos kun Clang-Wunused-variablo hello.c-o saluton, Clang avertas min pri tiu neuzitaj variablo en mia kodo. Nun, estas barelon da malsamaj averto tipoj, kaj estus malnormala devos printi ilin ĉiujn ekster kiam vi kuros Clang. Anstataŭe, estas simbola ligilo eblo turni ilin ĉiujn en --Muro. Ni ĉi ŝaltis defaŭlte kiam vi kuros fari en la aparaton, tial vi ricevos ĉiujn avertojn ke Clang povas doni al vi pri via kodo. En ĝenerala, havante via kodo produkti kompilita avertoj ne estas bona afero, kaj ni atendas ke la programoj kiujn vi skribas por CS50 esti avertante libera. Tamen, kiel vi vidas, Clang ankoraŭ produktas plenumeblan dosieron eĉ se ili avertas dum la kompilaĵon procezo. Ni povas, tamen, devigi Clang halti kompilaĵo kaj produkti eraron se renkontas ion inda averto en la kodo. Ni faras tion per la-Werror eblo. Nun, se mi kompili mia hello.c dosieron kun la neuzitaj int variablo x, Mi ne ricevos plenumebla dosiero. Nun, mi ne povas ignori kompilita avertoj. Mi bezonas iri ripari mian kodon. Alia grava eblo estas-ggdb. Tiu ebligas specialan depuración informo en la ruleblan dosieron, por ke mi povas kuri la erarserĉilo, gdb, se ĝi kraŝas. Sen ĉi tiu eblo, mi ne povas konsenti granda parto de mia programo informon ene gdb, kiel ŝanĝiĝema kaj funkcio nomoj, do ĝi estas grava por inkluzivi-ggdb ankaŭ. Kiam vi kuros fari sur la aparaton, la opcio estas ankaŭ inkludis defaŭlte. La fina opcio ke ĝi estas grava scii pri is-l, kiu estas uzata por ligi bibliotekoj en vian kodon. Ekzemple, se vi volas uzi funkcioj de la CS50 biblioteko, kiel GetString, Vi devas certigi ke ne nur vi # include la biblioteko header dosiero, CS50.h, en via. c fontkodon dosieron sed ankaŭ ke vi uzas-lcs50 kiam kompili, por ke la biblioteko de efektivigo estas ligita kun via programo. Ni ŝanĝu la saluton mondo programo por instigas la uzanton dum nomon kun la GetString funkcio kaj poste uzi la nomon en nia saluton kordoj. Nun, se ni provu kompili tiun programon o uzante-lcs50, ni preni eraron pri nedifinita referenco al GetString. Uh oh! Ni aldonu en-lcs50, kaj nun ĉio funkcias nur fajna. Unu gotcha estas ke ĝi faru diferencon kie en la komando vi skribas-lcs50. Se mi skribas ĝin antaŭ mi skribas hello.c, tiam la CS50 biblioteko estas ŝarĝitaj kaj procesis antaŭ mia fontkodon. Do, estas kvazaŭ mi ne skribis-lcs50 ajn. Kiel regulo de thumb, vi ĝenerale volas meti ĉiuj viaj-l opcioj fine de via komando. Do, nun ni metu ĉion kune. Clang-ggdb-Wall-Werror hello.c-lcs50-o saluton - tio estas multe da taskoj. Tial fari estas tiel helpema. Ĝi prizorgas ĉiuj, ke por vi. Do, nun vi havas bonan ideon pri kio eniras en kompili vian kodon. Mia nomo estas Nate Hardison. Ĉi tiu estas CS50. [CS50.TV]