3 Ugefaangen
3.1 Iwwersiicht
3.2 Viraussetzunge
3.2.1 Download vun der ns-3 Verëffentlechung als Quellarchiv
3.3 Eroflueden ns-3 mat Git
3.3.1 Luede ns-3 mat Bake
3.4 Assemblée ns-3
3.4.1 Gebai mat build.py
3.4.2 Gebai mat Bake
3.4.3 Bauen mat Waf
3.5 Testen ns-3
3.6 De Skript ausféieren
3.6.1 Kommando Linn Argumenter
3.6.2 Debugging
3.6.3 Aarbechtsverzeechnes
Kapitel 3
Ufänken
Dëst Kapitel ass geduecht fir de Lieser ze preparéieren fir mat engem Computer unzefänken deen ns-3 vläicht ni installéiert huet. Et deckt ënnerstëtzt Plattformen, Viraussetzungen, wéi Dir ns-3 kritt, wéi Dir ns-3 baut, a wéi Dir Äre Baut testen an einfache Programmer ausféiert.
3.1 Iwwersiicht
Den ns-3 Simulator ass als e System vu kollaborativen Softwarebibliothéike gebaut. Wärend der Versammlung ass de Code vun de Benotzerprogrammer mat dëse Bibliothéike verbonnen. D'C ++ oder Python Programméierungssprooche gi benotzt fir personaliséiert Programmer ze schreiwen.
Ns-3 gëtt als Quellcode verdeelt, dat heescht datt den Zilsystem e Softwareentwécklungsëmfeld muss hunn fir d'éischt d'Bibliothéiken ze bauen an dann de Benotzerprogramm ze bauen. Am Prinzip kéint ns-3 als fäerdeg Bibliothéike fir e spezifesche System verdeelt ginn, an an Zukunft kënnen se op dës Manéier verdeelt ginn. Awer hautdesdaags maachen vill Benotzer tatsächlech hir Aarbecht andeems se ns-3 selwer änneren, also ass et nëtzlech de Quellcode ze hunn fir d'Bibliothéiken ze bauen. Wann iergendeen d'Aarbecht wëll iwwerhuelen fir fäerdeg Bibliothéiken a Packagen fir Betribssystemer ze kreéieren, da kontaktéiert w.e.g. d'Mailinglëscht ns-Entwéckler.
Als nächst wäerte mir dräi Weeër kucken fir ns-3 erofzelueden an ze bauen. Déi éischt ass fir déi offiziell Verëffentlechung vun der Haaptsäit erofzelueden an ze bauen. Déi zweet ass d'Auswiel an d'Versammlung vun Exemplare vun Entwécklungsversiounen vun der Basis ns-3 Installatioun. Déi drëtt ass zousätzlech Build Tools ze benotzen fir méi Extensiounen fir ns-3 ze lueden. Mir ginn duerch jidderee well d'Tools liicht anescht sinn.
Erfuerene Linux Benotzer kënne sech froen firwat ns-3 net als Package geliwwert gëtt wéi déi meescht aner Bibliothéiken déi e Package Manager benotzen? Obwuel et binär Pakete fir verschidde Linux Verdeelungen (zB Debian) ginn, sinn déi meescht Benotzer um Enn d'Bibliothéiken z'änneren an d'ns-3 selwer opzebauen, sou datt de Quellcode verfügbar ass praktesch. Aus dësem Grond konzentréiere mir eis op d'Installatioun vun der Quell.
Fir déi meescht Uwendungen ns-3 Rechter root sinn net néideg, et ass recommandéiert en onprivilegéierte Benotzerkont ze benotzen.
3.2 Viraussetzunge
De ganze Set vu verfügbare ns-3 Bibliothéiken huet eng Zuel vun Ofhängegkeete vun Drëtt-Partei-Bibliothéiken, awer zum gréissten Deel kann ns-3 gebaut a benotzt ginn mat Ënnerstëtzung fir verschidde gemeinsam (oft Standard installéiert) Komponenten: e C++ Compiler, Python, e Quellcode Editor (zum Beispill, vim, Emacs oder Sonnendäischtert) an, wann Entwécklungsrepositories benotzt ginn, Git Versiounskontrollsystemer. Déi meescht éischte Kéier Benotzer brauche keng Suergen ze maachen wann hir Konfiguratioun e puer ns-3 fortgeschratt Features fehlt, awer fir déi, déi eng voll Installatioun wëllen, bitt de Projet eng Wiki déi Säiten mat vill nëtzlechen Tipps an Tricks enthält. Eng esou Säit ass d'Installatiounssäit, mat Installatiounsinstruktiounen fir verschidde Systemer, verfügbar op:
D'Viraussetzunge Sektioun vun dëser Wiki erklärt wéi eng Packagen erfuerderlech sinn fir allgemeng ns-3 Optiounen z'ënnerstëtzen a liwwert och d'Befehle fir se op gemeinsame Goûten vu Linux oder MacOS z'installéieren.
Dir kënnt vun dëser Geleeënheet profitéieren fir d'ns-3 Wiki Säit oder d'Haaptwebsäit z'entdecken:
Tool Package / Versioun
- C++ Compiler
clang++ oder g++ (g++ Versioun 4.9 oder méi héich) - Python
python2 Versioun >= 2.7.10, oder python3 Versioun >=3.4 - goen
all lescht Versioun (fir Zougang zu ns-3 op GitLab.com) - tar
all lescht Versioun (fir d'ns-3 Verëffentlechung auszepaken) - bunz2
all lescht Versioun (fir d'NS-3 Verëffentlechung auszepaken)
Fir d'Default Versioun vum Python z'iwwerpréiwen, Typ python -V
. Fir d'g ++ Versioun z'iwwerpréiwen, Typ g++ -v
. Wann Tools fehlen oder ze al sinn, kuckt w.e.g. den Installatiounsguide op der ns-3 Wiki Säit.
Vun elo un huelen mir un datt de Lieser Linux, MacOS oder e Linux Emulator leeft an op d'mannst déi uewe genannte Tools huet.
3.2.1 Download vun der ns-3 Verëffentlechung als Quellarchiv
Dëst ass de Verlaf vun der Handlung fir en neie Benotzer dee wëllt eroflueden an experimentéieren mat der leschter Verëffentlechung a Package Versioune vun ns-3. ns-3 Verëffentlechungen ginn als kompriméiert Quellarchiv publizéiert, heiansdo genannt tarball. tarball ass e spezielle Softwarearchivformat an deem verschidde Dateien zesumme kombinéiert sinn. Den Archiv ass normalerweis kompriméiert. ns-3 Boot Prozess iwwer tarball ass einfach, Dir musst just eng Verëffentlechung auswielen, eroflueden an auspacken.
Loosst eis unhuelen datt Dir als Benotzer ns-3 an engem lokalen Verzeichnis mam Numm bauen wëllt Aarbechtsberäich. Dir kënnt eng Aarbechtskopie vun der Verëffentlechung kréien andeems Dir déi folgend an d'Linux Konsole gitt (natierlech déi entspriechend Versiounsnummeren ersetzen)
$ 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
Opgepasst op d'Utilitéit déi uewen benotzt gëtt wiisst, wat e Kommandozeilinstrument ass fir Objeten vum Internet erofzelueden. Wann Dir et net installéiert hutt, kënnt Dir Äre Browser dofir benotzen.
Follegt dës Schrëtt Iech an den ns-allinone-3.29 Verzeichnis, do sollt Dir verschidde Dateien an Verzeichnisser gesinn
$ 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.py
Dir sidd elo prett fir d'NS-3 Basisverdeelung ze bauen a kënnt op d'Sektioun iwwer d'Gebai ns-3 weidergoen.
3.3 Eroflueden ns-3 mat Git
Den ns-3 Code ass verfügbar an de Git Repositories op GitLab.com bei
Deen einfachste Wee fir Git Repositories ze benotzen ass d'Ëmwelt ze gabel oder ze klonen ns-3-allinone. Dëst ass eng Rei vu Scripten déi d'Luede an d'Versammlung vun de meescht benotzten ns-3 Subsystemer geréiert. Wann Dir nei bei Git sidd, kënnen d'Begrëffer "Gabel" an "Klon" fir Iech onbekannt sinn; wann jo, empfeelen mir Iech einfach de Repository op GitLab.com ze klonen (maacht Är eege Kopie) sou:
$ cd
$ mkdir workspace
$ cd workspace
$ git clone https://gitlab.com/nsnam/ns-3-allinone.git
$ cd ns-3-allinone
Op dëser Etapp, d'Vue vun Ärem Verzeechnes ns-3-allinone liicht anescht aus dem Verëffentlechungsarchiv Dossier uewen beschriwwen. Et soll sou eppes ausgesinn:
$ ls
build.py constants.py download.py README util.py
Maacht weg datt et e Skript gëtt download.py, déi zousätzlech ns-3 a begleetend Quellcode extrahéiert. Hei hutt Dir e Choix: Luet entweder déi lescht ns-3 Entwécklung Snapshot erof:
$ python download.py
oder léiwer d'ns-3 Verëffentlechung mam Fändel benotzen -n
fir d'Verëffentlechungsnummer unzeginn:
$ python download.py -n ns-3.29
No dësem Schrëtt an de Verzeechnes ns-3-allinone zousätzlech Repositories ginn erofgelueden ns-3, Bak, pybindgen и netanim.
Remarque
Op enger Maschinn mat propperem Ubuntu16.04, brauch ech de Kommando op dëst z'änneren: $ sudo python3 download.py -n ns-3.29
(nodréiglech Iwwersetzer Notizen).
3.3.1 Luede ns-3 mat Bake
Déi uewe genannte zwou Methoden (Quellarchiv oder Repository ns-3-allinone iwwer Git) sinn nëtzlech fir déi einfachst ns-3 Installatioun mat multiple Addons ze kréien (pybindgen fir Python Bindungen ze generéieren an netanim fir Netzwierkanimatioun). Den drëtte Repository, deen am Standard am ns-3-allinone geliwwert gëtt, gëtt genannt Bak.
Bake ass en Tool fir koordinéiert Bau vu Software aus Multiple Repositories, entwéckelt fir den ns-3 Projet. Bake ka benotzt ginn fir Entwécklungsversioune vun ns-3 ze kréien, souwéi fir Extensiounen vun der Basisversioun vun der ns-3 Verdeelung erofzelueden an ze bauen, sou wéi d'Ëmwelt. Direkter Code Ausféierung, CradleNetwork Simulatioun Cradle, d'Kapazitéit fir nei Python Bindungen a verschidde ns-3 "Apps" ze kreéieren.
Remarque
CradleNetwork Simulation Cradle ass e Kader deen Iech erlaabt real TCP/IP Netzwierkstacks an engem Netzwierksimulator ze benotzen.
Wann Dir erwaart datt Är ns-3 Installatioun fortgeschratt oder zousätzlech Funktiounen huet, kënnt Dir dësen Installatiounswee verfollegen.
An de leschten ns-3 Verëffentlechungen Bake gouf zu der tar Fräisetzung dobäi. D'Verëffentlechung enthält eng Konfiguratiounsdatei déi Iech erlaabt déi aktuell Software Versiounen zur Zäit vun der Verëffentlechung erofzelueden. Dat ass zum Beispill d'Versioun Bake, déi mat der Verëffentlechung ns-3.29 verdeelt gëtt, ka benotzt ginn fir Komponente fir dës Verëffentlechung vun ns-3 oder fréier ze recuperéieren, awer kann net benotzt ginn fir Komponente fir spéider Verëffentlechungen ze recuperéieren (wann d'Paketbeschreiwungsdatei bakeconf.xml net aktualiséiert).
Dir kënnt och déi lescht Kopie kréien Bakandeems Dir de folgende Kommando an Är Linux Konsole gitt (ugeholl datt Dir Git installéiert hutt):
$ cd
$ mkdir workspace
$ cd workspace
$ git clone https://gitlab.com/nsnam/bake.git
Wann Dir de git Kommando leeft, sollt Dir eppes wéi déi folgend gesinn:
Cloning into 'bake'...
remote: Enumerating objects: 2086, done.
remote: Counting objects: 100% (2086/2086), done.
remote: Compressing objects: 100% (649/649), done.
remote: Total 2086 (delta 1404), reused 2078 (delta 1399)
Receiving objects: 100% (2086/2086), 2.68 MiB | 3.82 MiB/s, done.
Resolving deltas: 100% (1404/1404), done.
Nodeems de Kommando fäerdeg ass Klon Dir sollt e Verzeechnes mam Numm hunn Bak, den Inhalt vun deem soll esou ausgesinn:
$ cd bake
$ ls
bake bakeconf.xml bake.py doc examples generate-binary.py test TODO
Bedenkt datt Dir e puer Python Scripte gelueden hutt, e Python Modul genannt Bak an eng XML Konfiguratiounsdatei. De nächste Schrëtt ass dës Skripte ze benotzen fir d'ns-3 Verdeelung vun Ärer Wiel erofzelueden an ze bauen. Verschidde Personnalisatiounsziler sinn verfügbar:
-
ns-3.29: Modul entspriechend der Verëffentlechung; et wäert Komponente ähnlech wéi d'Verëffentlechung am Tarball eroflueden;
-
ns-3-dev: en ähnleche Modul, awer benotzt Code vum Entwécklungsbam;
-
ns-allinone-3.29: E Modul deen aner zousätzlech Funktiounen enthält wéi Click Routing an Network Simulation Cradle, Openflow fir ns-3.
-
ns-3-allinone: ähnlech wéi d'Verëffentlechungsversioun vum Modul alles an engem, mee fir Entwécklung Code.
Remarque
klickt - Modulär Softwarearchitektur fir Router ze kreéieren.
Openflow ass e Protokoll fir de Prozess vun der Veraarbechtung vun Daten iwwer e Datennetz duerch Router a Schalter iwwerdroen, Software-definéiert Netzwierktechnologie ëmzesetzen.
Den aktuellen Entwécklung Schnappschëss (net-Verëffentlechung) ns-3 kann op fonnt ginn:
D'Entwéckler probéieren dës Repositories an enger konsequent Aarbechtsuerdnung ze halen, awer si sinn am Entwécklungsberäich an enthalen net verëffentlechte Code, also wann Dir net plangt nei Features ze benotzen, wielt dann déi offiziell Verëffentlechung.
Dir kënnt déi lescht Versioun vum Code fannen andeems Dir d'Lëscht vun de Repositories sicht, oder andeems Dir op d'ns-3 Releases Websäit gitt:
Elo, fir d'ns-3 Komponenten ze kréien, déi mir brauchen, benotze mir den Tool Bake. Loosst eis e puer Aféierungswierder iwwer d'Aarbecht soen Bake.
Bake funktionnéiert andeems Paketquellen an e Verzeichnis lueden Quell an d'Bibliothéiken an de Build-Verzeichnis z'installéieren. Bake kann duerch Referenz op de Binär lafen, awer wann Dir wëllt lafen Bake net aus dem Verzeechnes an deem et erofgeluede gouf, ass et unzeroden de Wee ze addéieren Bak op Äre Wee (PATH Ëmfeld Variabel), zum Beispill wéi follegt (Beispill fir Linux Bash Shell). Gitt an de "bake" Verzeechnes a setzt dann déi folgend Ëmfeldvariablen:
$ export BAKE_HOME=`pwd`
$ export PATH=$PATH:$BAKE_HOME:$BAKE_HOME/build/bin
$ export PYTHONPATH=$PYTHONPATH:$BAKE_HOME:$BAKE_HOME/build/lib
Dëst wäert de Programm placéieren bake.py op de Shell Wee an erlaabt aner Programmer d'Ausféierbaren a Bibliothéiken ze fannen déi se erstallt hunn Bak. An e puer Benotzungsfäll Bak, d'PATH a PYTHONPATH Astellung uewen beschriwwen ass net erfuerderlech, awer e komplette Bau vun ns-3-allinone (mat zousätzlech Packagen) erfuerdert et normalerweis.
Gitt an Ären Aarbechtsverzeichnis a gitt déi folgend an der Konsole:
$ ./bake.py configure -e ns-3.29
Als nächst wäerte mir froen Bake kontrolléiert ob mir genuch Tools hunn fir déi verschidde Komponenten ze lueden. Wielt:
$ ./bake.py check
Dir sollt eppes wéi déi folgend gesinn:
> Python - OK
> GNU C++ compiler - OK
> Mercurial - OK
> Git - OK
> Tar tool - OK
> Unzip tool - OK
> Make - OK
> cMake - OK
> patch tool - OK
> Path searched for tools: /usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin ...
Besonnesch eropluede Tools wéi Mercurial, CVS, Git a Bazaar sinn essentiell an dësem Schrëtt well se eis erlaben de Code ze kréien. Op dëser Etapp installéiert déi fehlend Tools op déi üblech Manéier fir Äre System (wann Dir wësst wéi) oder kontaktéiert Äre Systemadministrator fir Hëllef.
Als nächst probéiert d'Software erofzelueden:
$ ./bake.py download
d'Resultat sollt eppes sinn wéi:
>> Searching for system dependency setuptools - OK
>> Searching for system dependency libgoocanvas2 - OK
>> Searching for system dependency gi-cairo - OK
>> Searching for system dependency pygobject - OK
>> Searching for system dependency pygraphviz - OK
>> Searching for system dependency python-dev - OK
>> Searching for system dependency qt - OK
>> Searching for system dependency g++ - OK
>> Downloading pybindgen-0.19.0.post4+ng823d8b2 (target directory:pybindgen) - OK
>> Downloading netanim-3.108 - OK
>> Downloading ns-3.29 - OK
Dëst bedeit datt dräi Quellen erofgeluede goufen. Gitt elo an de Quellverzeichnis a gitt ls; Dir sollt gesinn:
$ cd source
$ ls
netanim-3.108 ns-3.29 pybindgen
Elo sidd Dir prett fir d'ns-3 Verdeelung ze bauen.
3.4 Assemblée ns-3
Wéi beim Download vun ns-3, ginn et verschidde Weeër fir ns-3 ze bauen. Den Haapt Saach mir ënnersträichen wëllen ass, datt ns-3 gebaut ass mat engem bauen Outil genannt Wafënnert beschriwwen. Déi meescht Benotzer wäerte mat schaffen Waf, awer et ginn e puer praktesch Scripte fir Iech ze hëllefen unzefänken oder méi komplex Builds ze organiséieren. Also w.e.g., ier Dir iwwer liest Waf, kuckt op build.py an Assemblée mat Bak.
3.4.1 Gebai mat build.py
Opgepasst weg! Dëse Bauschrëtt ass nëmme verfügbar aus der Quellarchiv Versioun kritt wéi uewen beschriwwen; an net iwwer Git oder Bake erofgelueden.
Wann Dir mat engem Verëffentlechungsarchiv schafft tarball, an ns-3-allinone Et gëtt e praktesche Skript deen d'Komponente méi einfach maache kann. Et gëtt build.py genannt. Dëse Programm setzt de Projet fir Iech op déi nëtzlechst Manéier op. Wéi och ëmmer, bemierkt datt méi fortgeschratt Setup an Aarbecht mat ns-3 normalerweis d'Benotzung vum ns-3 säin eegene Build System, Waf, involvéiert, dee spéider an dësem Tutorial agefouert gëtt.
Wann Dir erofgeluede benotzt tarball, dann an Ärem Verzeichnis ~/Aarbechtsberäich engem Verzeechnes mat engem Numm eppes wéi ns-allinone-3.29. Gitt déi folgend:
$ ./build.py --enable-examples --enable-tests
Wann genannt build.py Mir hunn Kommandozeilargumenter benotzt fir d'Beispiller an Tester ze bauen déi an dësem Tutorial benotzt ginn, déi net als Standard an ns-3 gebaut ginn. Par défaut baut de Programm och all verfügbare Moduler. Dann, wann Dir wëllt, kënnt Dir ns-3 ouni Beispiller an Tester bauen, oder Moduler ausschléissen déi net fir Är Aarbecht gebraucht ginn.
Dir gesitt vill Compiler Output Messagen ugewisen vum Skript wéi et déi verschidden Deeler baut déi Dir gelueden hutt. Als éischt wäert de Skript probéieren den Animateur ze bauen netanim, dann de Bindungsgenerator pybindgen an endlech ns-3. Wann de Prozess fäerdeg ass, sollt Dir déi folgend gesinn:
Waf: Leaving directory '/path/to/workspace/ns-allinone-3.29/ns-3.29/build'
'build' finished successfully (6m25.032s)
Modules built:
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 (no Python) network nix-vector-routing
olsr point-to-point point-to-point-layout
propagation sixlowpan spectrum
stats tap-bridge test (no Python)
topology-read traffic-control uan
virtual-net-device visualizer wave
wifi wimax
Modules not built (see ns-3 tutorial for explanation):
brite click openflow
Leaving directory ./ns-3.29
An de leschten dräi Zeilen vun der Oplëschtung gesi mir e Message iwwer Moduler déi net gebaut goufen:
Modules not built (see ns-3 tutorial for explanation):
brite click
Dëst bedeit einfach datt e puer ns-3 Moduler, déi vun externe Bibliothéiken ofhängeg sinn, vläicht net gebaut goufen oder datt se net fir dës Konfiguratioun gebaut sinn. Dëst bedeit net datt de Simulator net montéiert ass oder datt déi montéiert Moduler net richteg funktionnéieren.
3.4.2 Gebai mat Bake
Wann Dir Bake uewen benotzt hutt fir Quellcode aus de Projet Repositories ze kréien, kënnt Dir weider benotze fir ns-3 ze bauen. Wielt:
$ ./bake.py build
an Dir sollt eppes gesinn wéi:
>> Building pybindgen-0.19.0.post4+ng823d8b2 - OK
>> Building netanim-3.108 - OK
>> Building ns-3.29 - OK
prompt: Dir kënnt och d'Download- an d'Build Schrëtt gläichzäiteg maachen andeems Dir "bake.py deploy" nennt.
Assemblée all Komponente kann versoen, mee Assemblée wäert weider wann eng Komponent net néideg ass. Zum Beispill, e rezente Portabilitéitsprobleem war dat castxml kann duerch Tool zesummegesat ginn Bak net op all Plattformen. An dësem Fall erschéngt e Message wéi dës:
>> Building castxml - Problem
> Problem: Optional dependency, module "castxml" failed
This may reduce the functionality of the final build.
However, bake will continue since "castxml" is not an essential dependency.
For more information call bake with -v or -vvv, for full verbose mode.
Awer, castxml nëmmen néideg wann Dir aktualiséiert Python Bindungen erstellen wëllt. Fir déi meescht Benotzer ass et net néideg fir dëst (op d'mannst bis se ns-3 änneren), sou datt esou Warnunge fir de Moment sécher ignoréiert kënne ginn.
Wann et feelt, gëtt de folgende Kommando Iech en Hiweis iwwer fehlend Ofhängegkeeten:
$ ./bake.py show
Déi verschidde Ofhängegkeete vun de Packagen, déi Dir probéiert ze bauen, ginn opgelëscht.
3.4.3 Bauen mat Waf
Bis zu dësem Zäitpunkt, fir unzefänken ns-3 ze bauen, hu mir entweder de Skript benotzt build.py, oder Tool Bak. Dës Tools sinn nëtzlech fir ns-3 ze bauen a Bibliothéiken z'erhalen. Tatsächlech, fir ze bauen lafen se de Bauinstrument Waf aus dem ns-3 Verzeichnis. Waf installéiert mam ns-3 Quellcode. Déi meescht Benotzer gi séier op direkt Benotzung fir den ns-3 ze konfiguréieren an ze montéieren Waf. Also, fir weiderzemaachen, gitt w.e.g. an den ns-3 Verzeichnis deen Dir ursprénglech erstallt hutt.
Dëst ass net strikt erfuerderlech zu dësem Zäitpunkt, awer et wäert nëtzlech sinn e bëssen zréckzekréien a kucken wéi Dir Ännerunge vun der Projektkonfiguratioun maacht. Wahrscheinlech déi nëtzlechst Konfiguratiounsännerung déi Dir maache kënnt ass eng optimiséiert Versioun vum Code ze kreéieren. Par défaut hutt Dir Äre Projet konfiguréiert fir eng Debug Versioun ze bauen. Loosst eis e Projet kucken fir en optimiséierte Bau ze kreéieren. Fir dem Waf z'erklären datt et optimiséiert Builds maache soll, déi Beispiller an Tester enthalen, musst Dir déi folgend Kommandoen ausféieren:
$ ./waf clean
$ ./waf configure --build-profile=optimized --enable-examples --enable-tests
Dëst wäert starten Waf ausserhalb vum lokalen Verzeechnes (fir Är Kamoudheet). Den éischte Kommando botzt aus dem fréiere Build, dëst ass normalerweis net strikt néideg, awer et ass gutt Praxis (kuckt och Build Profiler hei ënnen); dëst läscht virdrun erstallt Bibliothéiken an Objektdateien, déi am Verzeechnes sinn bauen /. Wann de Projet nei konfiguréiert ass an de Build-System déi verschidde Ofhängegkeete kontrolléiert, sollt Dir d'Ausgab ähnlech wéi déi folgend gesinn:
Setting top to : /home/ns3user/workspace/bake/source/ns-3-dev
Setting out to : /home/ns3user/workspace/bake/source/ns-3-dev/build
Checking for 'gcc' (C compiler) : /usr/bin/gcc
Checking for cc version : 7.3.0
Checking for 'g++' (C++ compiler) : /usr/bin/g++
Checking for compilation flag -march=native support : ok
Checking for compilation flag -Wl,--soname=foo support : ok
Checking for compilation flag -std=c++11 support : ok
Checking boost includes : headers not found, please ,!provide a --boost-includes argument (see help)
Checking boost includes : headers not found, please ,!provide a --boost-includes argument (see help)
Checking for program 'python' : /usr/bin/python
Checking for python version >= 2.3 : 2.7.15 python-config : /usr/bin/python-config
Asking python-config for pyembed '--cflags --libs --ldflags' flags : yes
Testing pyembed configuration : yes
Asking python-config for pyext '--cflags --libs --ldflags' flags : yes
Testing pyext configuration : yes
Checking for compilation flag -fvisibility=hidden support : ok
Checking for compilation flag -Wno-array-bounds support : ok
Checking for pybindgen location : ../pybindgen ,!(guessed)
Checking for python module 'pybindgen' : 0.19.0. ,!post4+g823d8b2
Checking for pybindgen version : 0.19.0. ,!post4+g823d8b2
Checking for code snippet : yes
Checking for types uint64_t and unsigned long equivalence : no
Checking for code snippet : no
Checking for types uint64_t and unsigned long long equivalence : yes
Checking for the apidefs that can be used for Python bindings : gcc-LP64
Checking for internal GCC cxxabi : complete
Checking for python module 'pygccxml' : not found
Checking for click location : not found
Checking for program 'pkg-config' : /usr/bin/pkg- ,!config
Checking for 'gtk+-3.0' : not found
Checking for 'libxml-2.0' : yes
checking for uint128_t : not found
checking for __uint128_t : yes
Checking high precision implementation : 128-bit integer ,!(default)
Checking for header stdint.h : yes
Checking for header inttypes.h : yes
Checking for header sys/inttypes.h : not found
Checking for header sys/types.h : yes
Checking for header sys/stat.h : yes
Checking for header dirent.h : yes
Checking for header stdlib.h : yes
Checking for header signal.h : yes
Checking for header pthread.h : yes
Checking for header stdint.h : yes
Checking for header inttypes.h : yes
Checking for header sys/inttypes.h : not found
Checking for library rt : yes
Checking for header sys/ioctl.h : yes
Checking for header net/if.h : yes
Checking for header net/ethernet.h : yes
Checking for header linux/if_tun.h : yes
Checking for header netpacket/packet.h : yes
Checking for NSC location : not found
Checking for 'sqlite3' : not found
Checking for header linux/if_tun.h : yes
Checking for python module 'gi' : 3.26.1
Checking for python module 'gi.repository.GObject' : ok
Checking for python module 'cairo' : ok
Checking for python module 'pygraphviz' : 1.4rc1
Checking for python module 'gi.repository.Gtk' : ok
Checking for python module 'gi.repository.Gdk' : ok
Checking for python module 'gi.repository.Pango' : ok
Checking for python module 'gi.repository.GooCanvas' : ok
Checking for program 'sudo' : /usr/bin/sudo
Checking for program 'valgrind' : not found
Checking for 'gsl' : not found python-config : not found
Checking for compilation flag -fstrict-aliasing support : ok
Checking for compilation flag -fstrict-aliasing support : ok
Checking for compilation flag -Wstrict-aliasing support : ok
Checking for compilation flag -Wstrict-aliasing support : ok
Checking for program 'doxygen' : /usr/bin/doxygen
---- Summary of optional ns-3 features:
Build profile : optimized
Build directory :
BRITE Integration : not enabled (BRITE not enabled (see option --with- ,!brite))
DES Metrics event collection : not enabled (defaults to disabled)
Emulation FdNetDevice : enabled
Examples : enabled
File descriptor NetDevice : enabled
GNU Scientific Library (GSL) : not enabled (GSL not found)
Gcrypt library : not enabled
(libgcrypt not found: you can use ,!libgcrypt-config to find its location.) GtkConfigStore : not enabled (library 'gtk+-3.0 >= 3.0' not fou nd)
MPI Support : not enabled (option --enable-mpi not selected)
ns-3 Click Integration : not enabled (nsclick not enabled (see option --with- ,!nsclick))
ns-3 OpenFlow Integration : not enabled (Required boost libraries not found)
Network Simulation Cradle : not enabled (NSC not found (see option --with-nsc))
PlanetLab FdNetDevice : not enabled (PlanetLab operating system not detected ,!(see option --force-planetlab)) PyViz visualizer : enabled
Python API Scanning Support : not enabled (Missing 'pygccxml' Python module)
Python Bindings : enabled
Real Time Simulator : enabled
SQlite stats data output : not enabled (library 'sqlite3' not found)
Tap Bridge : enabled
Tap FdNetDevice : enabled
Tests : enabled
Threading Primitives : enabled
Use sudo to set suid bit : not enabled (option --enable-sudo not selected)
XmlIo : enabled
'configure' finished successfully (6.387s)
Notéiert w.e.g. de leschten Deel vun der Oplëschtung hei uewen. E puer ns-3 Optiounen sinn net als Standard aktivéiert oder erfuerderen System Ënnerstëtzung fir richteg ze fonktionnéieren. Zum Beispill, fir XmlTo z'aktivéieren, muss d'Bibliothéik um System präsent sinn libxml-2.0. Wann dës Bibliothéik net fonnt gouf an déi entspriechend ns-3 Funktioun net ageschalt war, gëtt e Message ugewisen. Notéiert och datt et méiglech ass de Kommando ze benotzen sudo fir de suid Bit "Grupp ID bei Runtime" fir verschidde Programmer ze setzen. Et ass net als Standard aktivéiert an dofir erschéngt dës Feature als "net aktivéiert". Endlech, fir eng Lëscht vun aktivéierten Optiounen ze kréien, benotzt Waf mat Parameter --check-config
.
Loosst eis elo zréck goen a wiesselen zréck op den Debug Build mat Beispiller an Tester.
$ ./waf clean
$ ./waf configure --build-profile=debug --enable-examples --enable-tests
De Build System ass elo ageriicht an Dir kënnt Debug Versioune vun ns-3 Programmer bauen andeems Dir einfach tippt:
$ ./waf
D'Schrëtt uewendriwwer hu vläicht gezwongen, en Deel vum ns-3 System zweemol ze bauen, awer elo wësst Dir wéi Dir d'Konfiguratioun ännert an e optimiséierte Code bauen.
Fir z'iwwerpréiwen wéi ee Profil fir eng bestëmmte Projetkonfiguratioun aktiv ass, gëtt et e Kommando:
$ ./waf --check-profile
Waf: Entering directory `/path/to/ns-3-allinone/ns-3.29/build'
Build profile: debug
Den uewe Szenario build.py ënnerstëtzt och Argumenter --enable-examples
и --enable-tests
, awer aner Optiounen Waf et ënnerstëtzt net direkt. Zum Beispill, dëst wäert net schaffen:
$ ./build.py --disable-python
d'Reaktioun wäert esou sinn:
build.py: error: no such option: --disable-python
Wéi och ëmmer, de spezielle Bedreiwer -- kann benotzt ginn fir zousätzlech Parameteren duerch ze passéieren vufalso amplaz vun der uewendriwwer funktionnéiert de folgende Kommando:
$ ./build.py -- --disable-python
well et generéiert den Haaptbefehl ./waf configuréieren --disable-python. Hei sinn e puer méi Aféierungscoursen Tipps iwwer Waf.
Ëmgank mat Baufehler
ns-3 Verëffentlechungen ginn op déi lescht C++ Compilers getest, déi zur Verëffentlechung op gemeinsame Linux a MacOS Verdeelungen verfügbar sinn. Wéi och ëmmer, mat der Zäit ginn nei Verdeelunge mat neie Compiler verëffentlecht, an dës méi nei Compiler tendéieren méi pedantesch iwwer Warnungen. ns-3 konfiguréiert säi Build fir all Warnungen als Feeler ze behandelen, also heiansdo wann Dir eng al Versioun op engem méi neie System leeft, kann eng Compilerwarnung de Bau stoppen.
Zum Beispill gouf et virdru eng Verëffentlechung vun ns-3.28 fir Fedora 28, déi eng nei grouss Versioun enthält gcc (gcc-8). Baut d'Verëffentlechung ns-3.28 oder fréier Versiounen ënner Fedora 28, mat Gtk2+ installéiert, de folgende Feeler geschitt:
/usr/include/gtk-2.0/gtk/gtkfilechooserbutton.h:59:8: error: unnecessary parentheses ,!in declaration of ‘__gtk_reserved1’ [-Werror=parentheses] void (*__gtk_reserved1);
An Verëffentlechungen ab ns-3.28.1, an Waf eng Optioun ass verfügbar fir dës Problemer ze léisen. Et deaktivéiert d'Astellung vum "-Werror" Fändel a g ++ a clang ++. Dëst ass d'Optioun "--disable-werror" a muss während der Konfiguratioun applizéiert ginn:
$ ./waf configure --disable-werror --enable-examples --enable-tests
Konfiguréieren oder montéieren
E puer Kommandoen Waf hunn Bedeitung nëmmen an der Configuratioun Phase, an e puer sinn nëmmen valabel am Bau Phase. Zum Beispill, wann Dir d'ns-3 Emulatiounsfeatures benotze wëllt, kënnt Dir d'Bit-Astellung aktivéieren Suid benotzen sudo, wéi uewen beschriwwen. Dëst wäert d'Konfiguratiounsschrëttbefehl iwwerschreiden, an dofir kënnt Dir d'Konfiguratioun änneren andeems Dir de folgende Kommando benotzt, deen och Beispiller an Tester enthält.
$ ./waf configure --enable-sudo --enable-examples --enable-tests
Wann Dir dëst maacht Waf wäert starten sudoEmulatiounscode Socket Kreatiounsprogrammer z'änneren fir mat Permissiounen ze lafen root. d' Waf Et gi vill aner Optiounen verfügbar fir d'Konfiguratioun a Bauschrëtt. Fir Är Optiounen ze entdecken, gitt:
$ ./waf --help
An der nächster Sektioun wäerte mir e puer Testbezunnen Optiounen benotzen.
Assemblée Profiler
Mir hu scho gesinn wéi Dir kënnt konfiguréieren Waf fir Versammlungen Debug- и optimiséiert:
$ ./waf --build-profile=debug
Et gëtt och en Zwëschenversammlungsprofil, Fräisetzung. Optioun -d
ass synonym mat --build-profile
. De Build Profil kontrolléiert d'Benotzung vu Logbicher, Behaaptungen, a Compiler Optimisatiounsschalter:
Wéi Dir kënnt gesinn, Logbicher an Behaaptungen sinn nëmme verfügbar an Debug Builds. D'recommandéiert Praxis ass Äert Skript am Debug-Modus z'entwéckelen, dann widderholl Runen (fir Statistiken oder Parameterännerungen) an engem optimiséierte Bauprofil auszeféieren.
Wann Dir Code hutt deen nëmmen a bestëmmte Build Profiler lafen soll, benotzt de Code Wrapper Macro:
NS_BUILD_DEBUG (std::cout << "Part of an output line..." << std::flush; timer.Start ,!()); DoLongInvolvedComputation ();
NS_BUILD_DEBUG (timer.Stop (); std::cout << "Done: " << timer << std::endl;)
Standard, Waf Plaze bauen artifacts am bauen directory. Dir kënnt en aneren Ausgangsverzeichnis mat der Optioun spezifizéieren - -out
, zum Beispill:
$ ./waf configure --out=my-build-dir
Andeems Dir dëst mat Bauprofile kombinéiert, kënnt Dir einfach tëscht verschiddene Kompiléierungsoptiounen wiesselen:
$ ./waf configure --build-profile=debug --out=build/debug
$ ./waf build
...
$ ./waf configure --build-profile=optimized --out=build/optimized
$ ./waf build
...
Wat Iech erlaabt mat méi Versammlungen ze schaffen ouni all Kéier déi lescht Versammlung ze iwwerschreiwen. Wann Dir op en anere Profil wiesselt, Waf wäert et nëmmen kompiléieren, ouni alles komplett nei ze kompiléieren.
Wann Dir Build Profiler op dës Manéier wiesselt, musst Dir virsiichteg sinn all Kéier déiselwecht Konfiguratiounsoptiounen ze ginn. Verschidde Ëmweltvariablen definéieren hëlleft Iech Feeler ze vermeiden:
$ 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 build
Compilers a Fändelen
An den uewe Beispiller Waf fir ns-3 ze bauen benotzt den C++ Compiler vu GCC ( g ++). Wéi och ëmmer, Dir kënnt deen änneren deen Dir benotzt Waf C ++ Compiler, andeems Dir d'CXX Ëmfeldvariabel definéiert. Zum Beispill, fir den C++ Compiler Clang ze benotzen, clang++,
$ CXX="clang++" ./waf configure
$ ./waf build
Am selwechte Wee kënnt Dir konfiguréieren Waf ze benotzen verdeelt Kompilatioun benotzt distcc:
$ CXX="distcc g++" ./waf configure
$ ./waf build
Méi Informatioun iwwer distcc a verdeelt Kompilatioun fannt Dir op der Projektsäit an der Dokumentatiounssektioun. Fir Compiler Fändelen ze addéieren wann Dir ns-3 konfiguréiert, benotzt d'CXXFLAGS_EXTRA Ëmfeldvariabel.
Kader
Waf ka benotzt ginn fir Bibliothéiken op verschiddene Plazen um System z'installéieren. Par défaut sinn déi kompiléiert Bibliothéiken an ausführbaren am Verzeechnes bauen, a well Waf d'Plaz vun dëse Bibliothéiken an ausféierbar kennt, ass et net néideg d'Bibliothéiken soss anzwousch ze installéieren.
Wann d'Benotzer léiwer ausserhalb vum Build-Verzeichnis installéieren, kënne se de Kommando ausféieren ./waf installéieren. De Standard Präfix fir Installatioun ass / usr / lokal, also ./waf installéieren wäert Programmer installéieren an / usr / local / bin, Bibliothéiken an / usr / lokal / lib an Header Dateien an /usr/local/include. Superuser Rechter mussen normalerweis mat engem Standardpräfix gesat ginn, sou datt en typesche Kommando wier sudo ./waf installéieren. Wann lancéiert, wäert Waf fir d'éischt wielen déi gemeinsam Bibliothéiken am Build Verzeechnes ze benotzen, da kuckt no Bibliothéiken laanscht de Wee op d'Bibliothéiken déi am lokalen Ëmfeld konfiguréiert sinn. Also wann Dir Bibliothéiken op engem System installéiert, ass et eng gutt Praxis fir ze kontrolléieren ob déi richteg Bibliothéike benotzt ginn. D'Benotzer kënnen wielen mat engem anere Präfix z'installéieren andeems se d'Optioun während der Konfiguratioun weiderginn --prefix
, zum Beispill:
./waf configure --prefix=/opt/local
Wann méi spéit, nom Build, gitt de Benotzer den Installatiounskommando ./waf
, gëtt de Präfix benotzt /opt/local.
Equipe ./waf clean
muss benotzt ginn ier de Projet nei konfiguréieren wann d'Installatioun benotzt gëtt Waf ënner engem anere Präfix.
Also, fir ns-3 ze benotzen ass et net néideg ze ruffen ./waf install
. Déi meescht Benotzer brauche dëse Kommando net well Waf wäert déi aktuell Bibliothéiken aus dem Build Verzeechnes ophuelen, awer e puer Benotzer kënnen dat nëtzlech fannen wann hir Aktivitéite mat Programmer ausserhalb vum ns-3 Verzeichnis schaffen.
Waf Single
Um ieweschte Niveau vun der ns-3 Quell Bam gëtt et nëmmen ee Waf Skript. Wann Dir ufänkt ze schaffen, verbréngt Dir vill Zäit am Verzeechnes scratch/
oder méi déif ansrc/...
a gläichzäiteg musse lafen Waf. Dir kënnt just erënneren wou Dir sidd a lafen Waf wéi folgend:
$ ../../../waf ...
awer dëst wäert langweileg a Feeler ufälleg sinn, sou datt et besser Léisunge gëtt. Ee gemeinsame Wee ass en Texteditor ze benotzen wéi z Emacs oder vim, an deenen zwee Terminal Sessiounen opgemaach ginn, gëtt eng benotzt fir ns-3 ze bauen, an déi zweet gëtt benotzt fir de Quellcode z'änneren. Wann Dir nëmmen hutt tarball, da kann eng Ëmfeldvariabel hëllefen:
$ export NS3DIR="$PWD"
$ function waff { cd $NS3DIR && ./waf $* ; }
$ cd scratch
$ waff build
Am Modulverzeechnes kéint et verlockend sinn en trivial waf Skript derbäi ze ginn wéi exec ../../waf
. W.e.g. maach dat net. Dëst ass konfus fir Newbies a wann et schlecht gemaach gëtt, féiert dat zu schwéier z'entdecken Baufehler. Déi uewe gewisen Léisungen sinn de Wee dee benotzt soll ginn.
3.5 Testen ns-3
Dir kënnt d'ns-3 Verdeelung Eenheetstester ausféieren andeems Dir de Skript leeft ./test.py:
$ ./test.py
Dës Tester lafen parallel mat Waf. Eventuell sollt Dir e Message gesinn, deen seet:
92 of 92 tests passed (92 passed, 0 failed, 0 crashed, 0 valgrind errors)
Dëst ass e wichtege Message fir valgrind Crashen, Crashen oder Feeler z'identifizéieren, wat Problemer mam Code oder Inkompatibilitéit tëscht Tools a Code ugeet.
Dir wäert och d'Finale Ausgang gesinn aus Waf an en Tester deen all Test leeft, deen esou ausgesäit:
Waf: Entering directory `/path/to/workspace/ns-3-allinone/ns-3-dev/build'
Waf: Leaving directory `/path/to/workspace/ns-3-allinone/ns-3-dev/build'
'build' finished successfully (1.799s)
Modules built:
aodv applications bridge
click config-store core
csma csma-layout dsdv
emu energy flow-monitor
internet lte mesh
mobility mpi netanim
network nix-vector-routing ns3tcp
ns3wifi olsr openflow
point-to-point point-to-point-layout propagation
spectrum stats tap-bridge
template test tools
topology-read uan virtual-net-device
visualizer wifi wimax
PASS: TestSuite ns3-wifi-interference
PASS: TestSuite histogram
...
PASS: TestSuite object
PASS: TestSuite random-number-generators
92 of 92 tests passed (92 passed, 0 failed, 0 crashed, 0 valgrind errors)
Dëse Kommando gëtt normalerweis vu Benotzer ausgeführt fir séier z'iwwerpréiwen datt d'ns-3 Verdeelung richteg gebaut ass. (Notéiert datt d'Uerdnung vun den "PASS: ..." Zeilen anescht kann sinn, wat normal ass. Wat wichteg ass, ass datt d'Zesummesetzungslinn um Enn vum Bericht weist datt all Tester passéiert sinn; keng Tester gescheitert oder erofgefall.) An Wafan test.py wäert d'Aarbecht iwwer déi verfügbare Prozessorkäre vun der Maschinn paralleliséieren.
3.6 De Skript ausféieren
Mir lafen normalerweis Scripten ënner Kontroll Waf. Dëst erlaabt dem Build System sécherzestellen datt gemeinsame Bibliothéiksweeër korrekt agestallt sinn an datt d'Bibliothéike bei der Runtime verfügbar sinn. Fir de Programm ze lafen, benotzt einfach Waf mat Parameter - -run
. Loosst eis den ns-3 Äquivalent vum ubiquitesche Programm lafen Moien Weltandeems Dir déi folgend tippt:
$ ./waf --run hello-simulator
Waf wäert éischt kontrolléieren, datt de Programm richteg gebaut ass a bauen wann néideg. Dann Waf wäert e Programm ausféieren deen déi folgend Ausgab produzéiert.
Hello Simulator
Gratulatioun! Dir sidd elo e ns-3 Benotzer!
Wat soll ech maachen wann ech keng Resultater gesinn?
Wann Dir Messagen gesinn Wafbeweist datt de Bau erfollegräich ofgeschloss ass, awer Dir gesitt den Ausgang net "Hallo Simulator", da gëtt et eng Méiglechkeet datt Dir an der [Build-with-Waf] Sektioun Dir Äre Baumodus ëmgewandelt hutt optimiséiert, awer verpasst zréck an de Modus ze wiesselen Debug-. All Konsoloutput, déi an dësem Tutorial benotzt gëtt, benotzt e speziellen ns-3 Komponent, dee Logbicher ausféiert a benotzt gëtt fir personaliséiert Messagen op d'Konsole ze drécken. D'Ausgab vun dëser Komponent gëtt automatesch deaktivéiert wann optimiséierte Code kompiléiert ass - et ass "optimiséiert". Wann Dir den Ausgang "Hallo Simulator" net gesitt, gitt déi folgend:
$ ./waf configure --build-profile=debug --enable-examples --enable-tests
ze personaliséieren Waf fir Debug Versioune vun ns-3 Programmer ze bauen, déi Beispiller an Tester enthalen. Dir sollt dann déi aktuell Debug Versioun vum Code nei opbauen andeems Dir tippt
$ ./waf
Elo wann Dir de Programm lafen Moien-simulator, Dir sollt dat erwaart Resultat gesinn.
3.6.1 Kommando Linn Argumenter
Fir Kommandozeilargumenter an den ns-3 Programm ze passéieren, benotzt de folgende Muster:
$ ./waf --run <ns3-program> --command-template="%s <args>"
Ersetzt mam Numm vun Ärem Programm an den Argumenter. Argument - -command-template
fir Waf ass wesentlech e Rezept fir déi aktuell Kommandozeil ze bauen Waf benotzt fir de Programm auszeféieren. Waf kontrolléiert datt de Bau fäerdeg ass, setzt déi gemeinsam Bibliothéiksweeër, benotzt dann déi geliwwert Kommandozeil Schabloun an ersetzt de Programmnumm fir den %s Plazhalter fir den Ausféierbar ze ruffen. Wann Dir dës Syntax komplizéiert fannt, gëtt et eng méi einfach Versioun déi den ns-3 Programm involvéiert a seng Argumenter an eenzel Zitater abegraff:
$ ./waf --run '<ns3-program> --arg1=value1 --arg2=value2 ...'
En anert besonnesch nëtzlecht Beispill ass Test Suiten selektiv ze lafen. Loosst eis unhuelen datt et eng Testsuite gëtt genannt mytest (tatsächlech ass et net). Uewen hu mir den ./test.py Skript benotzt fir eng Rei Tester parallel auszeféieren, déi ëmmer erëm den Testprogramm ruffen test-runner. Call test-runner direkt fir een Test auszeféieren:
$ ./waf --run test-runner --command-template="%s --suite=mytest --verbose"
Argumenter ginn un de Programm weiderginn test-runner. Well mytest net existéiert, gëtt eng Fehlermeldung generéiert. Fir déi verfügbar Test-Runner Optiounen ze drécken, gitt:
$ ./waf --run test-runner --command-template="%s --help"
3.6.2 Debugging
Fir ns-3 Programmer ënner engem aneren Utility ze lafen, wéi en Debugger (zum Beispill, gdb) oder e Memory Test Tool (zum Beispill, valgrind), benotzt eng ähnlech Form - -command-template = "…"
. Zum Beispill, am Debugger ze lafen gdb Ären Hello-Simulator ns-3 Programm mat Argumenter:
$ ./waf --run=hello-simulator --command-template="gdb %s --args <args>"
Notéiert datt den ns-3 Programmnumm mam Argument kënnt - -run
, an de Management Utility (hei gdb) ass den éischten Token am Argument - -command-template
. Optioun - -args
informéiert gdbdatt de Rescht vun der Kommandozeil zum "ënneschten" Programm gehéiert. (E puer Versiounen gdb verstinn d'Optioun net - -args
. An dësem Fall, ewechzehuelen de Programm Argumenter aus - -command-template
a benotzt de Kommando Set gdb streit.) Mir kënnen dëst Rezept an dee virdrun kombinéieren fir den Test ënner dem Debugger auszeféieren:
$ ./waf --run test-runner --command-template="gdb %s --args --suite=mytest --verbose"
3.6.3 Aarbechtsverzeechnes
Waf soll vu senger Plaz am Top vum ns-3 Bam lancéiert ginn. Dësen Dossier gëtt den Aarbechtsverzeechnes wou d'Ausgabdateien geschriwwe ginn. Awer wat wann Dir dës Dateien ausserhalb vum ns-3 Quellbaum wëllt halen? Benotzt Argument - -cwd
:
$ ./waf --cwd=...
Dir kënnt et méi bequem fannen d'Ausgabdateien an Ärem Aarbechtsverzeechnes ze kréien. An dësem Fall kann déi folgend indirekt Aktioun hëllefen:
$ function waff {
CWD="$PWD"
cd $NS3DIR >/dev/null
./waf --cwd="$CWD" $*
cd - >/dev/null
}
Dës Dekoratioun vun der viregter Versioun vum Kommando behält den aktuellen Aarbechtsverzeechnes, geet an de Verzeichnis Wafan dann instructs Waf fir den Aarbechtsverzeechnes zréck an den aktuellen Aarbechtsverzeechnes ze änneren, dee gespäichert ass, ier Dir de Programm starten. Mir ernimmen d'Equipe - -cwd
Fir Vollständegkeet, lafen déi meescht Benotzer einfach Waf aus dem Top-Level Verzeechnes a generéieren do Outputdateien.
Source: will.com