
3 Tööleasumine
3.1 Ălevaade
3.2 Eeltingimused
3.2.1 ns-3 andmete arhiivi allalaadimine
3.3 ns-3 allalaadimine Git'i kaudu
3.3.1 ns-3 allalaadimine Bake'i abil
3.4 ns-3 ehitamine
3.4.1 build.py abil ehitamine
3.4.2 Bake'i abil ehitamine
3.4.3 Waf'i abil ehitamine
3.5 ns-3 testimine
3.6 Skripti kÀivitamine
3.6.1 KĂ€skude reas argumendid
3.6.2 Silumine
3.6.3 Töökaust
PeatĂŒkk 3
Tööleasumine
See peatĂŒkk on suunatud lugeja ettevalmistamisele tööks, alustades arvutist, kuhu ns-3 vĂ”ib-olla kunagi ei ole installitud. Esitlus hĂ”lmab toetatud platvorme, eeltingimusi, ns-3 hankimise viise, ns-3 ehitamise viise ja teie ehituse kontrollimise ning lihtsate programmide kĂ€ivitamise viise.
3.1 Ălevaade
ns-3 simulaator on ĂŒles ehitatud koostööd tegevate tarkvara raamatukogude sĂŒsteemina. Ehitamisel lingitakse kasutajaprogrammide kood nende raamatukogudega. Kasutajaprogrammide kirjutamiseks kasutatakse programmeerimiskeeli C++ vĂ”i Python.
Ns-3 levitat allika koodina, mis tĂ€hendab, et sihtsĂŒsteem peab omama tarkvaraarenduskeskkonda, et kĂ”igepealt koguda raamatukogud ja seejĂ€rel luua kasutajaprogramm. Ăldiselt vĂ”ib ns-3 jaotada valmis raamatukogudena konkreetsele sĂŒsteemile ning tulevikus vĂ”ib neid jaotada ka nii. Kuid praegu teevad paljud kasutajad oma tööd redigeerides ise ns-3, seega on kasulik omada lĂ€htekoodi raamatukogude kokkupanemiseks. Kui keegi soovib vĂ”tta vastutust valmis raamatukogude ja paketide loomise eest operatsioonisĂŒsteemidele, palun vĂ”tke ĂŒhendust meililistiga. ns-developers.
JĂ€rgmises osas vaatleme kolme meetodit ns-3 laadimiseks ja kokkupanekuks. Esimene neist on ametliku vĂ€ljaande allalaadimine ja selle ehitamine peamiselt veebisaidilt. Teine on arenduste versioonide kopeerimine ja kokkupanek pĂ”hiversioonist ns-3. Kolmas vĂ”imalus on kasutada lisakokkupanemise tööriistu, et laadida rohkem laiendusi ns-3 jaoks. Minge ĂŒle igaĂŒhega, kuna tööriistad on veidi erinevad.
Kogenud Linuxi kasutajad vĂ”ivad kĂŒsida, miks ns-3 ei pakuta paketi kujul nagu paljusid teisi teeke, mis kasutavad pakihaldurit? Kuigi erinevate Linuxi jaotuste jaoks on olemas binaarpaketid (nĂ€iteks Debian), peavad enamik kasutajaid lĂ”puks teeke redigeerima ja ns-3 ise uuesti kokku panema, mistĂ”ttu on allika koodi kergesti kĂ€tte saamine mugav. SeetĂ”ttu pöörame tĂ€helepanu allika koodist installimisele.
Enamikul juhtudel ei ole ns-3 Ôigusi vajalikud root ja soovitatakse kasutada mitteprivilegeeritud kasutajakontot.
3.2 Eeltingimused
Kogu nsâ3 raamatukogude komplekt sĂ”ltub mitmetest kolmandate osapoolte teekidest, kuid suuresti saab nsâ3 kokku panna ja kasutada koos mitmete levinud (tavaliselt vaikimisi installitud) komponentidega: C++ kompilaator, Python, lĂ€htekoodiredaktor (nt, vim, emacs vĂ”i Eclipse) ja kui kasutatakse arendusrepo, siis versioonihaldussĂŒsteem Git. Enamik algajaid kasutajaid ei pea muretsema, kui nende konfiguratsioon teatab mĂ”nest puuduvast lisafunktsioonist nsâ3, kuid need, kes soovivad tĂ€it installi, saavad projekti wiki kaudu juhiseid, mis sisaldavad palju kasulikke nĂ€punĂ€iteid. Ăks selline leht on 'Installatsioon' leht, mis pakub installatsioonijuhiseid erinevatele sĂŒsteemidele, ja need on saadaval aadressil: .
Selle wiki-lehekĂŒlje 'Eeltingimused' sektsioon selgitab, millised paketid on vajalikud nsâ3 tavapĂ€raste valikute toetamiseks ning annab kĂ€sud, mida kasutatakse nende installimiseks levinud Linuxi vĂ”i macOS variantides.
Te saate kasutada sellist vĂ”imalust nagu nsâ3 wikis oleva lehe vĂ”i pĂ”hisaidi uurimine, , kuna seal on palju teavet. Alates viimase nsâ3 versiooni (nsâ3.29) vĂ€ljalaskmisest on nsâ3 kĂ€ivitamiseks vajalikud jĂ€rgmised tööriistad:
Pakett/versioon
- C++ kompilaator
clang++ vÔi g++ (g++ versioon 4.9 vÔi kÔrgem) - Python
python2 versioon >= 2.7.10 vÔi python3 versioon >= 3.4 - Git
uusim versioon (nsâ3-le pÀÀsemiseks GitLab.com-is) - tar
uusim versioon (nsâ3 vĂ€ljaande dekomprimeerimiseks) - bunzip2
uusim versioon (nsâ3 vĂ€ljaande dekomprimeerimiseks)
Kohandatud Python versiooni kontrollimiseks sisestage python -V. g++ versiooni kontrollimiseks sisestage g++ -v. Kui mĂ”ni tööriist puudub vĂ”i on liiga vana, vaadake nsâ3 wikis installimisjuhendit.
KĂ€esolevast hetkest alates eeldame, et lugeja töötab Linuxis, MacOS-is vĂ”i Linuxi keskkonna emulaatoris ning tal on vĂ€hemalt ĂŒlaltoodud tööriistad.
3.2.1 ns-3 andmete arhiivi allalaadimine
See on uus kasutaja tegevusviis, kes tahab alla laadida ja katsetada uusimaid nsâ3 vĂ€ljaandeid ja paketiversioone. nsâ3 vĂ€ljalaskeid avaldatakse allalaaditavate allika arhiividena, mida nimetatakse mĂ”nikord tarball. tarball â see on eriline arhiiviformaat, kuhu on koondatud mitu faili. Arhiiv on tavaliselt tihendatud. ns-3 laadimise protsess tarball on lihtne, peate lihtsalt valima vĂ€ljalaske, allalaadima ja selle vĂ€lja pakkima.
Oletame, et soovite ns-3 koguda kohalikku kausta nimega workspace. Saate versiooni töökoopia, sisestades Linuxi terminalis jÀrgmise kÀsu (loomulikult asendades sobivad versiooninumbrid)
$ cd
$ mkdir workspace
$ cd workspace
$ wget https://www.nsnam.org/release/ns-allinone-3.29.tar.bz2
$ tar xjf ns-allinone-3.29.tar.bz2 Pange tĂ€hele ĂŒlaltoodud utiliiti wget, mis on kĂ€surea tööriist objektide allalaadimiseks Internetist. Kui te pole seda installinud, vĂ”ite kasutada selleks brauserit.
Nende sammude jÀrgimisega liidate ns-allinone-3.29 kausta, seal peaksite nÀgema mitmeid faile ja kaustu
$ cd ns-allinone-3.29
$ ls
bake constants.py ns-3.29 README
build.py netanim-3.108 pybindgen-0.17.0.post58+ngcf00cc0 util.pyNĂŒĂŒd olete valmis koguma ns-3 pĂ”hiversiooni ja saate minna jaotisse, mis kĂ€sitleb ns-3 ehitamist.
3.3 ns-3 allalaadimine Git'i kaudu
ns-3 kood on saadaval GitLab.com-i Git-repositooriumites aadressil . RĂŒhm nsnam koondab erinevaid reposiitooriume, mida kasutatakse avatud koodiga projektis.
Lihtsaim viis Git-reposiitorite kasutamise alustamiseks on teha fork vĂ”i kloonida keskkond. nsâ3-allinone. See on skripti kogum, mis haldab kĂ”ige sagedamini kasutatavate nsâ3 alamsĂŒsteemide allalaadimist ja kompilatsiooni. Kui oled Git'iga uus, vĂ”ivad terminid 'fork' ja 'kloonimine' sulle tundmatud olla; kui see on nii, soovitame sul lihtsalt kloonida (luua oma koopia) nende pĂ”hja GitLab.com lehelt jĂ€rgmiselt:
$ cd
$ mkdir workspace
$ cd workspace
$ git clone https://gitlab.com/nsnam/ns-3-allinone.git
$ cd ns-3-allinone Sellel etapil erineb sinu katalooge vĂ€henenud versioon eelnevalt kirjeldatud arhiiviga. See peaks vĂ€lja nĂ€gema umbes nii: nsâ3-allinone $ ls build.py constants.py download.py README util.py
Pane tĂ€hele, et seal on skriptdownload.py , mis tĂ€iendavalt ekstraktib nsâ3 ja sellega seotud lĂ€htekoodi. Siin on sul valida: kas laadida alla viimane arendusversioon nsâ3:$ python download.py
vĂ”i eelistada nsâ3 vĂ€ljaannet, kasutades lipukest-n vĂ€ljaande numbri mÀÀramiseks: $ python download.py -n ns-3.29
PĂ€rast seda sammu suunatakse kaustaPĂ€rast seda sammu kausta nsâ3-allinone laaditakse lisarepositoore nsâ3, bake, pybindgen ja netanim.
MĂ€rkus
Puhtal Ubuntu 16.04 masinal tuli mul kÀsk muuta selliseks: $ sudo python3 download.py -n ns-3.29 (siin ja edaspidi tÔlkija mÀrkused).
3.3.1 ns-3 allalaadimine Bake'i abil
Kaks eeltoodud meetodit (allikaarhiiv vĂ”i repositoorium nsâ3-allinone Git'i kaudu) on kasulikud nsâ3 lihtsaks installimiseks koos mitmete laiendustega (pybindgen Python'i sidemete genereerimiseks ja netanim vĂ”rgusimulatsiooni jaoks). Kolmas repositoorium, mis on vaikimisi saadaval nsâ3-allinone's, kannab nime bake.
Bake â see on tööriist, mis koordineeritud tarkvara kogumise tegemiseks mitmest repositooriumist, vĂ€lja töötatud nsâ3 projekti jaoks. Bake seda saab kasutada nsâ3 arendusteadete saamiseks ning ka pĂ”hidistibutsiooni nsâ3 laienduste allalaadimiseks ja kogumiseks, nagu keskkond Otse Koodi TĂ€itmine, CradleNetwork Simulation Cradle, uute Python'i sidemete loomise vĂ”imalus ja erinevad "rakendused" nsâ3.
MĂ€rkus
CradleNetwork Simulation Cradle on raamistik, mis vÔimaldab reaalsete TCP/IP vÔrgu stekkide kasutamist vÔrgu simulaatori sees.
Kui arvate, et teie ns-3 installatsioon peaks omama laiendatud vÔi lisafunktsioone, vÔite jÀrgida seda installimisteed.
viimastes ns-3 vÀljaannetes Bake on lisatud tar-vÀljaannete hulka. VÀljaanne sisaldab konfiguratsioonifaili, mis vÔimaldab allalaadimist vÀljaande loomise hetkel kehtivate tarkvaraversioonide jaoks. NÀiteks versioon Bake, mis levitatakse ns-3.29 versiooniga, vÔib kasutada komponente selle ns-3 vÀljaande vÔi varasemate jaoks, kuid ei saa kasutada hilisemate vÀljaannete komponentide allalaadimiseks (kui paketi kirjeldusfaili bakeconf.xml ei ole uuendatud).
Saate ka kÔige vÀrskema koopia bake, sisestades oma Linuxi konsooli jÀrgmise kÀsu (eeldusel, et teil on Git installitud):
$ cd
$ mkdir workspace
$ cd workspace
$ git clone https://gitlab.com/nsnam/bake.gitKÀsku git executeerides peaksite nÀgema midagi sellist:
Kloonimine 'bake'...
remotest: objektide loendamine: 2086, tehtud.
remote: objektide arvutamine: 100% (2086/2086), tehtud.
remote: objektide tihendamine: 100% (649/649), tehtud.
remote: Kokku 2086 (delta 1404), 2078 uuesti kasutatud (delta 1399)
Objektide vastuvÔtmine: 100% (2086/2086), 2.68 MiB | 3.82 MiB/s, tehtud.
Delta lahendamine: 100% (1404/1404), tehtud.PÀrast kÀsu lÔpetamist clone sulle peaks olema kataloog nimega bake, mille sisu peaks vÀlja nÀgema umbes selline:
$ cd bake
$ ls
bake bakeconf.xml bake.py doc examples generate-binary.py test TODOPange tĂ€hele, et olete laadimise mĂ”ned Python skriptid, Python moodul nimega bake ja XML konfiguratsiooni fail. JĂ€rgmine samm on nende skriptide kasutamine nsâ3 distributsiooni laadimiseks ja koostamiseks vastavalt teie valikule. Saadaval on mitu seadistamise eesmĂ€rki:
nsâ3.29: moodul, mis vastab vĂ€ljaandele; see laadib komponente, mis on sarnased vĂ€ljaande tarbimiseks;
nsâ3-dev: sarnane moodul, kuid kasutab koodi arenduse puust;
ns-allinone-3.29: moodul, mis sisaldab muid lisafunktsioone, nagu Click marsruutimine ja Network Simulation Cradle, Openflow ns-3 jaoks.
nsâ3-allinone: sarnane vĂ€ljaande versiooni moodulile allinone, kuid arenduskoodile.
MĂ€rkus
Click â moodulaarne tarkvaraarhitektuur ruuterite loomiseks.
Openflow on andmete edastamise protsessi juhtimise protokoll, mida kasutavad ruuterid ja lĂŒlitid, rakendades programmiga konfigureeritava vĂ”rgu tehnoloogiat.
Aktiivne arenduse (mitte vĂ€ljalaske) nsâ3 snapshot on saadaval jĂ€rgmistel aadressidel:.
Arendajad pĂŒĂŒavad neid repositoore hoida jĂ€rjepidevas töökorras, kuid need on arenduse faasis ja sisaldavad mittevĂ€ljaantud koodi, seega, kui te ei plaani uusi funktsioone kasutada, valige ametlik vĂ€ljaanne.
Viimase koodi versiooni leiate, vaadates repositooride loendit vĂ”i kĂŒlastades veebilehte ânsâ3 Releasesâ: ja klĂ”psates viimase versiooni lingil. Selles nĂ€ites jĂ€tkame versiooniga nsâ3.29.
NĂŒĂŒd, et saada vajalikud koostisosad nsâ3 jaoks, rakendame tööriista Bake. RÀÀkige mĂ”nest sissejuhatavast sĂ”nast Bake.
Bake töötab, laadides pakettide lĂ€htekoodid kausta source ja paigaldades raamatukogud ehituskausta. Bake Seda saab kĂ€ivitada, viidates binaarfailile, kuid kui soovite kĂ€ivitada Bake mitte kaustast, kuhu see laaditi, oleks soovitatav lisada tee bake teie teele (keskkonnamuutuja PATH), nĂ€iteks jĂ€rgmiselt (nĂ€ide Linux bashist). Liikuge âbakeâ kausta ja seejĂ€rel seadke jĂ€rgmised keskkonnamuutujad:
$ export BAKE_HOME=`pwd`
$ export PATH=$PATH:$BAKE_HOME:$BAKE_HOME/build/bin
$ export PYTHONPATH=$PYTHONPATH:$BAKE_HOME:$BAKE_HOME/build/libSee paigutab programmi bake.py kÀivituskausta, mis vÔimaldab teistel programmidel leida teie loodud kÀivitatavaid faile ja raamatukogusid bake. Teatud kasutusjuhtudel bake, nagu eespool kirjeldatud, ei ole PATHi ja PYTHONPATHi seadistamine vajalik, kuid ns-3-allinone (tÀiendavate pakettide) tÀielikuks koostamiseks on see tavaliselt vajalik.
Liikuge töökausta ja sisestage konsooli jÀrgmine kÀsk:
$ ./bake.py configure -e ns-3.29SeejÀrel palume Bake kontrollida, kas meil on piisavalt tööriistu erinevate komponentide allalaadimiseks. Sisestage:
$ ./bake.py checkPeaksite nÀgema midagi sellist:
> Python - OK
> GNU C++ kompilatsioon - OK
> Mercurial - OK
> Git - OK
> Tar tool - OK
> Unzip tool - OK
> Make - OK
> cMake - OK
> patch tool - OK
> Otsitud tööriistade tee: /usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin ...EelkĂ”ige on sellel etapil peamised allalaadimistööriistad nagu Mercurial, CVS, Git ja Bazaar, kuna need vĂ”imaldavad meil koodi hankida. Sel etapil installige puuduvad tööriistad oma sĂŒsteemile tavalisel viisil (kui oskate) vĂ”i pöörduge abi saamiseks oma sĂŒsteemiadministraatori poole.
SeejÀrel proovige alla laadida tarkvara:
$ ./bake.py downloadtulemusena peaks olema midagi sellist:
>> Otsitakse sĂŒsteemide sĂ”ltuvust setuptools - OK
>> Otsitakse sĂŒsteemide sĂ”ltuvust libgoocanvas2 - OK
>> Otsitakse sĂŒsteemide sĂ”ltuvust gi-cairo - OK
>> Otsitakse sĂŒsteemide sĂ”ltuvust pygobject - OK
>> Otsitakse sĂŒsteemide sĂ”ltuvust pygraphviz - OK
>> Otsitakse sĂŒsteemide sĂ”ltuvust python-dev - OK
>> Otsitakse sĂŒsteemide sĂ”ltuvust qt - OK
>> Otsitakse sĂŒsteemide sĂ”ltuvust g++ - OK
>> Laaditakse alla pybindgen-0.19.0.post4+ng823d8b2 (sihtkaust:pybindgen) - OK
>> Laaditakse alla netanim-3.108 - OK
>> Laaditakse alla ns-3.29 - OKSee tĂ€hendab, et on alla laaditud kolm allikat. NĂŒĂŒd minge kausta source ja sisestage ls; peaksite nĂ€gema:
$ cd source
$ ls
netanim-3.108 ns-3.29 pybindgenNĂŒĂŒd olete valmis nsâ3 paketile montaaĆŸi tegema.
3.4 ns-3 ehitamine
Nii nagu nsâ3 allalaadimisel, on palju vĂ”imalusi nsâ3 kokkupanemiseks. Peamine on rĂ”hutada, et nsâ3 monteeritakse kasutada tööriista, mida nimetatakse Waf, mida kirjeldatakse allpool. Enamik kasutajaid kasutavad Waf, kuid on ka mĂ”ned mugavad skriptid, mis aitavad teil alustada vĂ”i korraldada keerukamaid monteerimisi. SeetĂ”ttu, palun enne lugemist Waf, vaadake build.py ja monteerimist bake.
3.4.1 build.py abil ehitamine
TÀhelepanu! See monteerimisetapp on saadaval ainult allalaaditud lÀhtekoodiarhiivist, nagu eespool kirjeldatud; mitte git-i vÔi bake-i kaudu allalaadimisest.
Töötades versiooni arhiiviga tarball, in nsâ3âallinone on mugav skript, mis vĂ”ib lihtsustada komponentide koostamist. See kannab nime build.py. See programm seadistab projekti teie jaoks kĂ”ige kasulikmal viisil. Siiski pidage meeles, et keerukamad seadistused ja töö nsâ3-ga hĂ”lmavad tavaliselt nsâ3 enda ehitussĂŒsteemi, Waf-i, mille tutvustamine toimub hiljem kĂ€esolevas juhendis.
Kui olete allalaadimise teinud tarball, peaks teie kataloogis ~/workspace olema kataloog nimega midagi sarnast ns-allinone-3.29. Sisestage jÀrgmine kÀsk:
$ ./build.py --enable-examples --enable-tests
Kutsudes build.py oleme rakendanud kĂ€surea argumente, et kompileerida selles juhendis kasutatavad nĂ€ited ja testid, mis nsâ3-s vaikimisi ei kompileerita. Vaikimisi ehitab programm ka kĂ”ik saadavalolevad moodulid. Kui soovite, saate hiljem koostada nsâ3 ilma nĂ€idete ja testideta vĂ”i jĂ€tta vĂ€lja moodulid, mis pole teie töö jaoks vajalikud.
Te nÀete palju kompilaatori vÀljundeid, mis kuvatakse skripti poolt erinevate allalaaditud osade koostamisel. Esiteks proovib skript kokku panna animaatori netanim, seejÀrel sidumise generaatori pybindgen ja, ja lÔpuks, ns-3. Protsessi lÔppedes peaksite nÀgema jÀrgmist:
Waf: JĂ€tame katalooge '/path/to/workspace/ns-allinone-3.29/ns-3.29/build'
'build' lÔpetati edukalt (6m25.032s)
Kokku pandud moodulid:
antenna aodv applications
bridge buildings config-store
core csma csma-layout
dsdv dsr energy
fd-net-device flow-monitor internet
internet-apps lr-wpan lte
mesh mobility mpi
netanim (ei Pythonit) network nix-vector-routing
olsr point-to-point point-to-point-layout
propagation sixlowpan spectrum
stats tap-bridge test (ei Pythonit)
topology-read traffic-control uan
virtual-net-device visualizer wave
wifi wimax
Mooduleid pole loodud (vt ns-3 Ôpetust selgituse saamiseks):
brite click openflow
JÀtame katalooge ./ns-3.29Viimastes kolmes real nÀeme sÔnumit moodulite kohta, mis ei ole loodud:
Mooduleid pole loodud (vt ns-3 Ôpetust selgituse saamiseks):
brite clickSee tÀhendab lihtsalt, et mÔned ns-3 moodulid, mis sÔltuvad vÀlistest raamatukogudest, pole ehk loodud vÔi et antud konfiguratsioonis nende loomine ei ole vajalik. See ei tÀhenda, et simulaator ei ole kokku pandud vÔi et loodud moodulid ei tööta Ôigesti.
3.4.2 Bake'i abil ehitamine
Kui te kasutasite projekti hoidlatest lÀhtekoodi hankimiseks bake'i, saate seda jÀtkuvalt kasutada ka ns-3 ehitamiseks. Sisestage:
$ ./bake.py buildja peaksite nÀgema midagi jÀrgmist:
>> Ehitamine pybindgen-0.19.0.post4+ng823d8b2 - OK
>> Ehitamine netanim-3.108 - OK
>> Ehitamine ns-3.29 - OKNipp: saate samuti mÔlemat sammu, nii allalaadimist kui ka ehitamist, teha, kutsudes "bake.py deploy".
Kogu komponentide ehitamisel vĂ”ivad esineda tĂ”rked, kuid ehitamine jĂ€tkub, kui komponent ei ole kohustuslik. NĂ€iteks oli hiljutine ĂŒhilduvusprobleem seotud sellega, et castxml vĂ”ib ehitada tööriistaga bake mitte kĂ”ikidel platvormidel. Sellisel juhul kuvatakse jĂ€rgmine sĂ”num:
>> Ehitamine castxml - Probleem
> Probleem: Valikuline sÔltuvus, moodul "castxml" ebaÔnnestus
See vÔib vÀhendada lÔppversiooni funktsionaalsust.
Kuid bake jÀtkab, kuna "castxml" ei ole hÀdavajalik sÔltuvus.
Rohkem teavet saate bake'i kutsumiseks -v vĂ”i -vvv, tĂ€ieliku ĂŒksikasjaliku reĆŸiimi jaoks.Kuid castxml on vajalik ainult siis, kui soovite luua uuendatud Python'i seoseid. Enamik kasutajaid ei vaja seda (vĂ€hemalt seni, kuni nad ei hakka ns-3 muutma), seega saab selliseid hoiatusteateid praegu ohutult ignoreerida.
Kui tÔrge peaks tekkima, annab jÀrgmine kÀsk teile vihje puuduvatest sÔltuvustest:
$ ./bake.py showLoetletakse erinevad paketis sÔltuvused, mida proovite kokku panna.
3.4.3 Waf'i abil ehitamine
Selleks ajaks, et alustada ns-3 kogumist, oleme kasutanud kas skripti build.pyvÔi tööriista bake. Need tööriistad on kasulikud ns-3 kogumiseks ja raamatukogude toetamiseks. Tegelikult kÀivitavad nad kogumisinstrumenti Waf ns-3 all olevast kataloogist. Waf installeeritakse koos ns-3 lÀhtekoodiga. Enamik kasutajaid, et seadistada ja kokku panna ns-3, liiguvad kiiresti otse Waf. Niisiis, jÀtkamiseks minge palun ns-3 katalooge, mille algselt lÔite.
Hetkel ei ole see rangelt vajalik, kuid on kasulik teha vÀike kÔrvalepÔige ja vaadata, kuidas projekti konfiguratsiooni muuta. TÔenÀoliselt on kÔige kasulikum konfiguratsiooni muutus, mille saate teha, optimeeritud versiooni loomine. Vaikimisi olete seadnud oma projekti kompileerima silumisversiooni. Vaatame projekti optimeeritud versiooni loomiseks. Selgitamaks Waf-ile, et ta peaks tegema optimeeritud kogusid, mis sisaldavad nÀiteid ja teste, peate tÀitma jÀrgmised kÀsud:
$ ./waf clean
$ ./waf configure --build-profile=optimized --enable-examples --enable-testsSee kĂ€ivitab Waf vĂ€ljas kohalikus kataloogis (teie mugavuse huvides). Esimene kĂ€sk puhastab eelmise kompileerimise, see ei ole tavaliselt rangelt vajalik, kuid on hea tava (vt ka allpool kogumise profiile); see eemaldab varem loodud teegid ja objektifailid, mis asuvad kataloogis build/. Kui projekt on uuesti seadistatud ja ehitussĂŒsteem kontrollib erinevaid sĂ”ltuvusi, peaksite nĂ€gema vĂ€ljundit, mis sarnaneb jĂ€rgmisega:
Seaded ĂŒlemiseks: /home/ns3user/workspace/bake/source/ns-3-dev
Seaded vÀljundiks: /home/ns3user/workspace/bake/source/ns-3-dev/build
Kontrollimine 'gcc' (C kompilaator) : /usr/bin/gcc
Kontrollimine cc versioon: 7.3.0
Kontrollimine 'g++' (C++ kompilaator) : /usr/bin/g++
Kontrollimine kompileerimisflagi -march=native toetust: ok
Kontrollimine kompileerimisflagi -Wl,--soname=foo toetust: ok
Kontrollimine kompileerimisflagi -std=c++11 toetust: ok
Kontrollimine boosti kaasandeid : pÀised ei leitud, palun, !esitage --boost-includes argument (vt abi)
Kontrollimine boosti kaasandeid : pÀised ei leitud, palun, !esitage --boost-includes argument (vt abi)
Kontrollimine programmi 'python' : /usr/bin/python
Kontrollimine python versioon >= 2.3 : 2.7.15 python-config: /usr/bin/python-config
KĂŒsimine python-configist pyembed '--cflags --libs --ldflags' lipud : jah
Testimine pyembed konfiguratsioon: jah
KĂŒsimine python-configist pyext '--cflags --libs --ldflags' lipud : jah
Testimine pyext konfiguratsioon: jah
Kontrollimine kompileerimisflagi -fvisibility=hidden toetust: ok
Kontrollimine kompileerimisflagi -Wno-array-bounds toetust: ok
Kontrollimine pybindgen asukohta: ../pybindgen, !(arvatud)
Kontrollimine python moodulit 'pybindgen': 0.19.0, !post4+g823d8b2
Kontrollimine pybindgen versioon: 0.19.0, !post4+g823d8b2
Kontrollimine koodi fragment: jah
Kontrollimine tĂŒĂŒpide uint64_t ja unsigned long ekvivalents: ei
Kontrollimine koodi fragment: ei
Kontrollimine tĂŒĂŒpide uint64_t ja unsigned long long ekvivalents: jah
Kontrollimine apidefide, mida saab kasutada Pythoni sidemete jaoks: gcc-LP64
Kontrollimine sisemist GCC cxxabi: tÀidetud
Kontrollimine python moodulit 'pygccxml': ei leitud
Kontrollimine click asukohta: ei leitud
Kontrollimine programmi 'pkg-config': /usr/bin/pkg-, !config
Kontrollimine 'gtk+-3.0': ei leitud
Kontrollimine 'libxml-2.0': jah
Kontrollimine uint128_t: ei leitud
Kontrollimine __uint128_t: jah
Kontrollimine suure tÀpsusega rakendust: 128-bitine tÀisarv, !(vaikimisi)
Kontrollimine pÀist stdint.h: jah
Kontrollimine pÀist inttypes.h: jah
Kontrollimine pÀist sys/inttypes.h: ei leitud
Kontrollimine pÀist sys/types.h: jah
Kontrollimine pÀist sys/stat.h: jah
Kontrollimine pÀist dirent.h: jah
Kontrollimine pÀist stdlib.h: jah
Kontrollimine pÀist signal.h: jah
Kontrollimine pÀist pthread.h: jah
Kontrollimine pÀist stdint.h: jah
Kontrollimine pÀist inttypes.h: jah
Kontrollimine pÀist sys/inttypes.h: ei leitud
Kontrollimine raamatukogu rt: jah
Kontrollimine pÀist sys/ioctl.h: jah
Kontrollimine pÀist net/if.h: jah
Kontrollimine pÀist net/ethernet.h: jah
Kontrollimine pÀist linux/if_tun.h: jah
Kontrollimine pÀist netpacket/packet.h: jah
Kontrollimine NSC asukohta: ei leitud
Kontrollimine 'sqlite3': ei leitud
Kontrollimine pÀist linux/if_tun.h: jah
Kontrollimine python moodulit 'gi': 3.26.1
Kontrollimine python moodulit 'gi.repository.GObject': ok
Kontrollimine python moodulit 'cairo': ok
Kontrollimine python moodulit 'pygraphviz': 1.4rc1
Kontrollimine python moodulit 'gi.repository.Gtk': ok
Kontrollimine python moodulit 'gi.repository.Gdk': ok
Kontrollimine python moodulit 'gi.repository.Pango': ok
Kontrollimine python moodulit 'gi.repository.GooCanvas': ok
Kontrollimine programmi 'sudo': /usr/bin/sudo
Kontrollimine programmi 'valgrind': ei leitud
Kontrollimine 'gsl': ei leitud, python-config: ei leitud
Kontrollimine kompileerimisflagi -fstrict-aliasing toetust: ok
Kontrollimine kompileerimisflagi -fstrict-aliasing toetust: ok
Kontrollimine kompileerimisflagi -Wstrict-aliasing toetust: ok
Kontrollimine kompileerimisflagi -Wstrict-aliasing toetust: ok
Kontrollimine programmi 'doxygen': /usr/bin/doxygen
---- Valikuline ns-3 omaduste kokkuvÔte:
Kogumise profiil: optimeeritud
Kogumise kataloog:
BRITE integreerimine: mitte lubatud (BRITE ei ole lubatud (vt valikut --with-, !brite))
DES-i mÔÔtmete sĂŒndmuste kogumine: mitte lubatud (vaikimisi keelatud)
Emulatsioon FdNetDevice: lubatud
NĂ€ited: lubatud
Faili descriptor NetDevice: lubatud
GNU teaduslik raamatukogu (GSL): ei ole lubatud (GSL ei leitud)
Gcrypt raamatukogu: ei ole lubatud
(libgcrypt ei leitud: saate kasutada ,!libgcrypt-config selle asukoha leidmiseks.) GtkConfigStore: ei ole lubatud (raamatukogu 'gtk+-3.0 >= 3.0' ei leitud)
MPI tugi: ei ole lubatud (valik --enable-mpi ei ole valitud)
ns-3 Click integreerimine: ei ole lubatud (nsclick ei ole lubatud (vt valikut --with-, !nsclick))
ns-3 OpenFlow integreerimine: ei ole lubatud (nÔutavad boosti raamatukogud ei leitud)
VÔrgu simuleerimise kere: ei ole lubatud (NSC ei leitud (vt valikut --with-nsc))
PlanetLab FdNetDevice: ei ole lubatud (PlanetLab operatsioonisĂŒsteemi ei tuvastatud, !(vt valiku --force-planetlab))
PyViz visualiseerija: lubatud
Python API skaneerimise tugi: ei ole lubatud (puudub 'pygccxml' Python moodul)
Pythoni sidemed: lubatud
Reaalajas simulaator: lubatud
SQlite stats andmete vÀljund: ei ole lubatud (raamatukogu 'sqlite3' ei leitud)
Tap Bridge: lubatud
Tap FdNetDevice: lubatud
Testid: lubatud
Traditsioonilised primitiivid: lubatud
Kasutage sudo suid bitti seadmiseks: ei ole lubatud (valik --enable-sudo ei ole valitud)
XmlIo: lubatud
'configure' lĂ”petati eduka lĂ”puga (6.387s)Pange tĂ€hele ĂŒlaltoodud loendi viimast osa. MĂ”ned ns-3 valikud ei ole vaikimisi sisse lĂŒlitatud vĂ”i vajavad nĂ”uetekohaseks toimimiseks sĂŒsteemi toetust. NĂ€iteks, et lubada XmlTo, peab sĂŒsteemis olema kohalolev raamatukogu libxml-2.0. Kui seda raamatukogu ei leitud ning vastavat ns-3 funktsiooni ei lĂŒlitatud sisse, kuvatakse teade. Samuti pange tĂ€hele, et on vĂ”imalik kasutada kĂ€sku sudo suid'i bit 'suid ID ehk grupi seadmine kĂ€itamise ajal' teatud programmide jaoks. See ei ole vaikimisi sisse lĂŒlitatud ja seetĂ”ttu kuvatakse see funktsioon kui 'ei ole aktiivne' ('not enabled'). LĂ”puks, et saada nimekiri sisse lĂŒlitatud valikutest, kasutage Waf argumenti --check-config.
NĂŒĂŒd naeme tagasi ja vahetame tagasi silumisversiooni, mis sisaldab nĂ€idiseid ja teste.
$ ./waf clean
$ ./waf configure --build-profile=debug --enable-examples --enable-testsKogumissĂŒsteem on nĂŒĂŒd seadistatud, ja saate ehitada ns-3 silumisversioone, lihtsalt tippides:
$ ./wafOlgu, et eeltoodud sammud on sundinud teid ns-3 sĂŒsteemi kaks korda kokku panema, kuid nĂŒĂŒd teate, kuidas konfiguratsiooni muuta ja optimeeritud koodi koostada.
Kuidas kontrollida, milline profiil on antud projekti konfiguratsiooni jaoks aktiivne, on olemas kÀsk:
$ ./waf --check-profile
Waf: Sisenemine katalooge `/path/to/ns-3-allinone/ns-3.29/build'
Kogumise profiil: debugĂlaltoodud stsenaarium build.py toetab ka argumente --enable-examples ja --enable-tests, kuid ta ei toeta otseselt teisi valikuid. Waf NĂ€iteks ei tööta see:
$ ./build.py --disable-pythonreaktsioon on jÀrgmine:
build.py: error: no such option: --disable-pythonSiiski saab erilist operaatorit -âŻ- kasutada tĂ€iendavate parameetrite edastamiseks lĂ€bi waf, seega töötab jĂ€rgmine kĂ€sk:
$ ./build.py -- --disable-pythonkuna see genereerib pĂ”hikĂ€sku ./waf configure âdisable-python. Siin on veel mĂ”ned sissejuhatuslikud nĂ€punĂ€ited Waf.
Kogumise vigade kÀsitlemine
nsâ3 vĂ€ljalasked on testitud uusimate C++ kompilaatoritega, mis olid saadaval vĂ€ljaande ajal levinud Linuxi ja MacOS jaotustes. Aja jooksul aga vĂ€ljastatakse uusi jaotusi koos uute kompilaatoritega, mis on tavaliselt ettevaatlikumad hoiatuste osas. nsâ3 seadistab oma ehituse, et kĂ€sitleda kĂ”iki hoiatusi kui vigu, seega vĂ”ib vanema versiooni kasutamine uuel sĂŒsteemil pĂ”hjustada kompilaatori hoiatusi, mis peatavad ehituse.
NĂ€iteks oli varem vĂ€ljalase nsâ3.28 Fedora 28 jaoks, mis sisaldas uut suurt versiooni gcc (gcc-8). nsâ3.28 vĂ”i varasemate versioonide ehitamisel Fedora 28-l, kui Gtk2+ on installitud, vĂ”ib tekkida jĂ€rgmine viga:
/usr/include/gtk-2.0/gtk/gtkfilechooserbutton.h:59:8: error: unnecessary parentheses ,!in declaration of â__gtk_reserved1â [-Werror=parentheses] void (*__gtk_reserved1);VĂ€ljalaskes, mis algab nsâ3.28.1, Waf on saadaval valik nende probleemide lahendamiseks. See keelab flagi "-Werror" seadistamise g++ ja clang ++ jaoks. See on valik "âdisable-werror", mida tuleks rakendada konfigureerimise ajal:
$ ./waf configure --disable-werror --enable-examples --enable-testsKonfigureeri vÔi ehita
MĂ”ned kĂ€sklused Waf omavad mĂ”tet ainult seadistamisfaasis, samas kui mĂ”ned toimivad ainult koostamisfaasis. NĂ€iteks, kui soovite kasutada ns-3 emulatsiooni funktsioone, saate lubada bitiseadmise. suid kasutades sudo, nagu eespool kirjeldatud. See tĂŒhistab seadistamisfaasi kĂ€sud, vĂ”imaldades teil konfiguratsiooni muuta jĂ€rgnevate kĂ€skudega, mis sisaldavad ka nĂ€iteid ja teste.
$ ./waf configure --enable-sudo --enable-examples --enable-testsKui teete seda, Waf kÀivitab sudo, et muuta emulatsioonikoodi soketite loomise programme, et neid saaks kÀitada Ôigustega. root. Dokumendihalduses Waf saadaval on palju muid valikuid seadistamise ja koostamise etappide jaoks. Valikute uurimiseks tippige:
$ ./waf --helpJÀrgmises osas kasutame mÔned testimisega seotud valikud.
Koostamisprofiilid
Oleme juba nÀinud, kuidas saab seadistada Waf koostamisteks. debug ja optimized:
$ ./waf --build-profile=debugSamuti on olemas vahepealne koostamisprofiil, release. Valik -d on sĂŒnonĂŒĂŒm --build-profile. Koostamisprofiil haldab logimise, vĂ€idete (assertions) ja kompilaatori optimeerimisvĂ”tmete kasutamist:

Kuidas nĂ€htud, on logimine ja vĂ€idikud saadaval ainult silumise versioonides. Soovitatav praktikaks on kirjutada oma skripti silumisreĆŸiimis ja seejĂ€rel teostada korduvkasutusi (statistika vĂ”i parameetrite muutmiseks) optimeeritud koostamisprofiilis.
Kui teil on kood, mis peab toimuma ainult teatud koostamisprofiilides, kasutage makrot Code Wrapper Macro:
NS_BUILD_DEBUG (std::cout << "Osa vÀljundi reas..." << std::flush; timer.Start ,!()); DoLongInvolvedComputation ();
NS_BUILD_DEBUG (timer.Stop (); std::cout << "Tehtud: " << timer << std::endl;)Vaikimisi, Waf paigutab koostamisartefaktid koostamiskausta. VĂ”ite mÀÀrata teise vĂ€ljundkausta, kasutades valikut -âŻ-out, nĂ€iteks:
$ ./waf configure --out=my-build-dirKombineerides seda koostamisprofiilidega, saate hÔlpsasti vahetada erinevate kompileerimisvalikute vahel:
$ ./waf configure --build-profile=debug --out=build/debug
$ ./waf build
...
$ ./waf configure --build-profile=optimized --out=build/optimized
$ ./waf build
...See vĂ”imaldab teil töötada mitme koostamisega, ilma et peaksite iga kord viimast koostamist ĂŒmber kirjutama. Kui vahetate teisele profilile, Waf kompileeritakse ainult see, ilma et kogu uuesti kompileeritaks.
Kui vahetate ehitusprofiile, peate hoolitsema selle eest, et iga kord kasutada samma konfiguratsiooni parameetreid. Te saate vigu vÀltida, mÀÀrates mitu keskkonnamuutujat:
$ export NS3CONFIG="--enable-examples --enable-tests"
$ export NS3DEBUG="--build-profile=debug --out=build/debug"
$ export NS3OPT="--build-profile=optimized --out=build/optimized"
$ ./waf configure $NS3CONFIG $NS3DEBUG
$ ./waf build
...
$ ./waf configure $NS3CONFIG $NS3OPT
$ ./waf buildKompilaatorid ja lipud
Ălaltoodud nĂ€idetes Waf kasutab nsâ3 C++ kompilaatorit GCC-st ( g++). Siiski on vĂ”imalik muuta kasutatavat Waf C++ kompilaatorit, mÀÀrates keskkonnamuutujat CXX. NĂ€iteks, et kasutada C++ kompilaatorit Clang, clang++,
$ CXX="clang++" ./waf configure
$ ./waf build Sarnaselt saab seadistada Waf jaotatud kompileerimist distcc:
$ CXX="distcc g++" ./waf configure
$ ./waf buildRohkem teavet distcc ja jaotatud kompileerimise kohta leiate projekti dokumentatsioonist. Kui konfigureerite nsâ3, et lisada kompilaatori lipud, kasutage keskkonnamuutujat CXXFLAGS_EXTRA.
Installeerimine
Waf vĂ”ib kasutada raamatukogude installimiseks erinevatesse sĂŒsteemi kohtadesse. Vaikimisi asuvad kogutud raamatukogud ja kĂ€ivitatavad failid kataloogis build, ja kuna Waf teab nende raamatukogude ja kĂ€ivitatavate failide asukohta, ei ole raamatukogude installimine kuhugi mujale vajalik.
Kui kasutajad eelistavad installida vĂ€ljaspool ehituskausta, saavad nad kĂ€ivitada kĂ€su ./waf install. Vaikimisi on installimise prefiks - /usr/local, seega ./waf install paigaldab programmid /usr/local/bin, raamatukogud /usr/local/lib ja pĂ€ised /usr/local/include. Superkasutaja Ă”igused on tavaliselt vajalikud vaikimisi prefiksi installimiseks, seega tĂŒĂŒpiline kĂ€sk on sudo ./waf install. KĂ€ivitusel eelistab Waf esmalt kasutada ehituskausta ĂŒhiseid raamatukogusid, seejĂ€rel otsib raamatukogusid raamatukogude teelt, mis on seadistatud kohalikus keskkonnas. Seega on hea praktika raamatukogude installimisel sĂŒsteemi kontrollida, et kasutatakse Ă”igeid raamatukogusid. Kasutajad saavad valida mĂ”ne teise prefiksiga installimise, edastades konfigureerimise ajal valiku --prefix, nĂ€iteks:
./waf configure --prefix=/opt/localKui kasutaja sisestab paigalduskomandi pÀrast kokkupanekut, ./waf, kasutatakse prefiksina /opt/local.
Meeskond ./waf clean , mida peab kasutama enne projekti ĂŒmberkonfigureerimist, kui paigalduseks kasutatakse Waf teist prefiksi.
Seega ei ole ns-3 kasutamiseks vajalik kÀsu kÀivitamine ./waf install. Enamusele kasutajatest seda kÀsku tÔenÀoliselt ei vajalik, kuna Waf haarab praegused teegid koostamise kaustast, kuid mÔned kasutajad vÔivad leida, et see on kasulik, kui nende tegevus hÔlmab programmidest vÀljaspool ns-3 kausta töötamist.
Waf on ĂŒhtne
ns-3 allika puu ĂŒlemisel tasemel on ainult ĂŒks Waf-i skript. Kui alustate, veedate palju aega kaustas scratch/ vĂ”i sĂŒgavamal, kaustassrc/... ja vĂ”ib-olla on teil vajadus kĂ€ivitada Waf. VĂ”ite lihtsalt meeles pidada, kus te olete, ja kĂ€ivitada Waf jĂ€rgmiselt:
$ ../../.. /waf ..., aga see on vĂ€sitav ja alti vale, seega on paremaid lahendusi. Ăks levinud viisidest on kasutada tekstiredaktorit, nagu emacs vĂ”i vim, kus avatakse kaks terminali sessiooni, millest ĂŒks on mĂ”eldud ns-3 kogumiseks ja teine allika koodi redigeerimiseks. Kui teil on ainult tarball, siis vĂ”ib aidata keskkonnamuutuja:
$ export NS3DIR="$PWD"
$ function waff { cd $NS3DIR && ./waf $* ; }
$ cd scratch
$ waff buildMooduli kataloogis vĂ”ib tunduda ahvatlev, et lisada triviaalne waf skript nĂ€idise jĂ€rgi exec ../../waf. Palun Ă€rge tehke seda. See segab algajaid, ning halva tĂ€itmise korral toob kaasa raskesti tuvastatavaid kogumise vigu. Ălaltoodud lahendused on need, mida jĂ€rgida.
3.5 ns-3 testimine
Saate kÀivitada ns-3 distributiivide moodulitestid, kÀivitades skripti ./test.py:
$ ./test.pyNeed testid kÀivitatakse paralleelselt Waf. LÔppkokkuvÔttes peaksite nÀgema sÔnumit, et
92 of 92 tests passed (92 passed, 0 failed, 0 crashed, 0 valgrind errors)See on oluline sĂ”num, et tuvastada rikkeid, krahhe vĂ”i valgrind vigu, mis nĂ€itab koodiga vĂ”i tööriistade ja koodi ĂŒhilduvuse probleeme.
Te nÀete ka lÔppvÀljastust Waf ja testijalt, kes iga testi kÀivitab, mis nÀeb vÀlja umbes nii:
Waf: Sisen direktoriisse `/path/to/workspace/ns-3-allinone/ns-3-dev/build'
Waf: JĂ€tame direktori `/path/to/workspace/ns-3-allinone/ns-3-dev/build'
'build' lÔpetas edukalt (1.799s)
Kompileeritud moodulid:
aodv rakendused sild
klik konfiguratsioon-pood tuum
csma csma-layout dsdv
emu energia voogude jÀlgimine
internet lte vÔrgu
liikumine mpi netanim
vÔrk nix-vector-routes ns3tcp
ns3wifi olsr openflow
punkt-punkt punkt-punkt-layout levik
spekter statistika tap-bridge
template test tööriistad
topoloogia-lugemine uan virtuaalne-net-seade
visualiseerija wifi wimax
PASS: TestSuite ns3-wifi-interference
PASS: TestSuite histogram
...
PASS: TestSuite objekt
PASS: TestSuite juhuslikud-arvugeneraatorid
92 92-st testist lÀbis (92 lÀbis, 0 ebaÔnnestus, 0 krahhi, 0 valgrind viga)
See kommando kĂ€ivitavad tavaliselt kasutajad nsâ3 jaotuse koostamise Ă”igsuse kiireks kontrollimiseks. (Palun pange tĂ€hele, et "PASS: ..." ridade jĂ€rjestus vĂ”ib erineda, see on normaalne. Oluline on see, et lĂ”ppkokkuvĂ”tte real on kĂ”ik kontrollid lĂ€bitud; ĂŒkski test ei ebaĂ”nnestunud ega katkenud.) Ja Waf, ja test.py jagavad töö koormust saadaval olevate protsessori tuumade vahel masinas.
3.6 Skripti kÀivitamine
Tavaliselt kĂ€ivitame skripte jĂ€relevalve all Waf. See vĂ”imaldab ehitussĂŒsteemil tagada, et ĂŒhiste teekide teed on Ă”igesti seadistatud ja et raamatukogud on tööajal saadaval. Programm kĂ€ivitamiseks kasutage lihtsalt Waf argumenti -âŻrun. KĂ€ivitame nsâ3 jaoks samavÀÀrse universaalse programmi hello world, sisestades jĂ€rgmise:
$ ./waf --run hello-simulatorWaf kontrollib esmalt, et programm on Ôigesti kokkupanek ja vajadusel viib lÀbi kompileerimise. Siis Waf kÀivitab programmi, mis toob jÀrgmise vÀljundi.
Hello SimulatorPalju Ă”nne! NĂŒĂŒd olete nsâ3 kasutaja!
Mida ma peaksin tegema, kui ma ei nÀe tulemust?
Kui nĂ€ete sĂ”numeid Waf, mis nĂ€itavad, et kompileerimine oli edukalt lĂ”petatud, kuid ei nĂ€e vĂ€ljundit «Hello Simulator», siis on tĂ”enĂ€oliselt, et olete jaotises [Kompileerimine-waf] lĂŒlitanud oma ehitusreĆŸiimi optimized, kuid jĂ€tsite tagasipöördumise reĆŸiimi vahele debug. Konsooli vĂ€ljund, mida selles juhendis kasutatakse, kasutab spetsiaalset komponenti nsâ3, mis logib ja prindib kasutajateateid konsooli. Selle komponendi vĂ€ljund on optimeeritud koodi kompileerimisel automaatselt keelatud â see on "optimeeritud". Kui te ei nĂ€e vĂ€ljundit âHello Simulatorâ, sisestage jĂ€rgnev:
$ ./waf configure --build-profile=debug --enable-examples --enable-testset seadistada Waf nsâ3 programmide silumise versioonide koostamiseks, mis sisaldavad nĂ€idiseid ja teste. SeejĂ€rel peate uuesti kompileerima kĂ€esoleva silumise versiooni koodi, sisestades
$ ./wafNĂŒĂŒd, kui kĂ€ivitate programmi hello-simulator, peaksite nĂ€gema oodatud tulemust.
3.6.1 KĂ€skude reas argumendid
KĂ€skude lisamiseks nsâ3 programmi argumendid, kasutage jĂ€rgmist mallia:
$ ./waf --run --command-template="%s "Asendage oma programmi nimega ja argumentidega. Argument -âŻ-command-template kuna Waf on pĂ”himĂ”tteliselt retsept tegeliku kĂ€surea koostamiseks. Waf kĂ€ideldav programmide kĂ€itamiseks. Waf kontrollib, et koostamine on lĂ”petatud, seadistab teed jagatud raamatukogusse ja seejĂ€rel, kasutades antud kĂ€surea malle ja asendades %s kohatĂ€itja programmi nimega, kutsub tĂ€itmisfaili. Kui see sĂŒntaks tundub keeruline, on olemas lihtsam variant, milles on nsâ3 programm ja selle argumendid ĂŒksikute ĂŒlakomade vahel:
$ ./waf --run ' --arg1=value1 --arg2=value2 ...'Teine, eriti kasulik, nĂ€ide on testikomplektide valikulise kĂ€itamise vĂ”imalus. Oletame, et on olemas testikomplekt (suite) mytest (tĂ”eliselt pole seda olemas). Ălalpool kasutasime skripti ./test.py mitmeid teste paralleelselt kĂ€ivitamiseks, mis kutsub testimisprogrammi korduvasti. test-runner. Otse kutsub ĂŒles ĂŒhe testi kĂ€itamiseks: test-runner $ ./waf --run test-runner --command-template="%s --suite=mytest --verbose"
Argumente edastatakse programmi.Kuna mytest ei eksisteeri, genereeritakse veateade. Test-runneri saadaval olevate parameetrite printimiseks sisestage: test-runner$ ./waf --run test-runner --command-template="%s --help"
$ ./waf --run test-runner --command-template="%s --help"3.6.2 Silumine
EttevĂ”tte nsâ3 programmide kĂ€ivitamiseks teise tööriista all, nagu nĂ€iteks debugeerija (nt gdb) vĂ”i mĂ€lu kontrollimise tööriist (nt valgrind), kasutage sarnast vormi -âŻ-command-template = "âŠ". NĂ€iteks, et kĂ€ivitada debugeerijas gdb teie hello-simulator nsâ3 programmi argumentidega:
$ ./waf --run=hello-simulator --command-template="gdb %s --args "Pange tĂ€hele, et nsâ3 programmi nimi on koos argumendiga -âŻrun, ja juhtimise utiliit (siin gdb) on esimene token argumendis -âŻ-command-template. Valik -âŻ-args teatab gdb, mis tĂ€hendab, et ĂŒlejÀÀnud kĂ€surea osa kuulub «madalamale» programmile. (MĂ”ned versioonid gdb ei mĂ”ista valikut -âŻ-args. Sel juhul eemaldage programmi argumendid -âŻ-command-template ja kasutage kĂ€su komplekti gdb args.) Saame selle retsepti ja eelneva kokku panna, et kĂ€ivitada test debugeerijas:
$ ./waf --run test-runner --command-template="gdb %s --args --suite=mytest --verbose"3.6.3 Töökaust
Waf tuleb kĂ€ivitada oma asukohast nsâ3 puu ĂŒlaosas. See kaust muutub töödirektoriks, kuhu salvestatakse vĂ€ljundfailid. Kuid mis siis, kui soovite need failid salvestada vĂ€ljapoole nsâ3 lĂ€htekoodi puu? Kasutage argumenti -âŻ-cwd:
$ ./waf --cwd=...VÔib-olla on teil mugavam saada vÀljundfailid oma töökaustas. Sel juhul vÔib aidata selline kaudne tegevus:
$ function waff {
CWD="$PWD"
cd $NS3DIR >/dev/null
./waf --cwd="$CWD" $*
cd - >/dev/null
}Selline eelmise versiooni kĂ€su dekoreerimine sĂ€ilitab praeguse töökausta, liigub kausta Waf, ja seejĂ€rel annab kĂ€su Waf tagasi liikumiseks salvestatud töökausta enne programmi kĂ€ivitamist. Mainime kĂ€sku -âŻ-cwd tĂ€ielikkuse huvides, enamik kasutajaid kĂ€ivitavad lihtsalt Wafi ĂŒlemise taseme kaustast ja genereerivad seal vĂ€ljundfailid.
Allikas: habr.com
