CMake - Buildsystem und mehr
This is a modal window.
Das Video konnte nicht geladen werden, da entweder ein Server- oder Netzwerkfehler auftrat oder das Format nicht unterstützt wird.
Formale Metadaten
Titel |
| |
Serientitel | ||
Anzahl der Teile | 94 | |
Autor | ||
Lizenz | CC-Namensnennung 4.0 International: Sie dürfen das Werk bzw. den Inhalt zu jedem legalen Zweck nutzen, verändern und in unveränderter oder veränderter Form vervielfältigen, verbreiten und öffentlich zugänglich machen, sofern Sie den Namen des Autors/Rechteinhabers in der von ihm festgelegten Weise nennen. | |
Identifikatoren | 10.5446/45789 (DOI) | |
Herausgeber | ||
Erscheinungsjahr | ||
Sprache |
Inhaltliche Metadaten
Fachgebiet | ||
Genre | ||
Abstract |
|
FrOSCon 201881 / 94
3
7
9
10
13
14
16
19
21
23
25
28
29
30
31
32
33
36
37
39
40
41
43
44
46
48
49
50
53
54
57
67
75
76
77
80
81
85
90
91
92
93
00:00
HTTPCMakeCMakeProgrammiergerätXMLUMLVorlesung/Konferenz
00:50
SoftwareCMakeSoftwarewerkzeugGebäude <Mathematik>EllipseUNIXSoftwaremakeGebäude <Mathematik>CMakeXML
02:16
CMakeVersion <Informatik>KDEMySQLScribusProject <Programm>KDECMakeCodeVersion <Informatik>LogarithmusFunktion <Mathematik>VariableSoftwareLokales MinimumVorlesung/KonferenzBesprechung/InterviewXML
04:56
World Wide WebCMakeProject <Programm>TermNetbook-ComputerDateiSoftwarewerkzeugThumbnailVerschlingungQuellcodeCompilerVersion <Informatik>C++MinimumCMakeComputeranimationProgramm/Quellcode
07:18
DateiThumbnailmakeProgramm/QuellcodeComputeranimation
08:37
DateiCMakeGebäude <Mathematik>DateiQuellcodeProgramm/QuellcodeComputeranimationVorlesung/Konferenz
09:20
QuellcodeGebäude <Mathematik>CMakeDEBUG <Programm>Komponente <Software>DateiÜbersetzer <Informatik>QuellcodeComputeranimation
10:41
GNU <Software>CompilerGebäude <Mathematik>CMakeComputeranimation
11:52
Gebäude <Mathematik>DateimakeProgramm/Quellcode
12:45
CMakeGNU <Software>CompilerGebäude <Mathematik>DateiBenutzerführungRouterCMakeComputeranimationProgramm/QuellcodeVorlesung/Konferenz
13:35
DateiThumbnailCMakeCMakeVariableComputeranimationProgramm/Quellcode
14:50
DateiThumbnailCMakeComputeranimationProgramm/Quellcode
15:43
DateiNetbook-ComputerCMakeBenutzerführungThumbnailmakeQuellcodeUNIXDemoszene <Programmierung>Gebäude <Mathematik>CodeTouchscreenUpdateDisplayAtomarität <Informatik>Expandierender GraphSuperLearnCachingmakeProgramm/QuellcodeComputeranimationXML
16:47
DateiCMakeBenutzerführungCodeThumbnailProgrammiergerätVariableProgramm/QuellcodeComputeranimation
17:43
ProgrammTARGETS <Programm>WINDOWS <Programm>Computeranimation
18:34
World Wide WebCMakeDateiFunktion <Mathematik>ZeichenketteComputeranimationProgramm/QuellcodeXML
21:59
CMakeProgrammETS <Programm>DateiVariableCMakeComputeranimationXML
23:23
World Wide WebMultiplikationCMakeDateiThumbnailVariableVersion <Informatik>Programm/Quellcode
24:10
CMakeDateiVariableProgrammiergerätComputeranimationProgramm/Quellcode
25:29
CMakeVariableComputeranimation
27:16
DateiCMakeMinor <Graphentheorie>Version <Informatik>ALI <Programm>VariableVersion <Informatik>Programm/QuellcodeComputeranimation
28:11
DateiCMakeSchnittmengeThumbnailLokales MinimumApple <Marke>WINDOWS <Programm>STLFahne <Mathematik>Funktion <Mathematik>BefehlsprozessorPhysikProgramm/QuellcodeComputeranimationVorlesung/Konferenz
30:19
ManagementinformationssystemProgrammbibliothekVorlesung/KonferenzComputeranimation
31:00
InternetE-MailVorlesung/Konferenz
32:59
FehlermeldungmakeDateimakeSoftwareVorlesung/Konferenz
35:50
DateiCMakemakeQuellcodeDateiProgramm/QuellcodeComputeranimation
36:36
CMakeDateiGebäude <Mathematik>SoftwareSchnittmengeMetadatenVersion <Informatik>DateiformatProgramm/QuellcodeComputeranimation
37:19
Demoszene <Programmierung>SchnittmengeMetadatenQuellcodeCMakemakeUbuntu <Programm>XMLProgramm/Quellcode
39:24
QuellcodeCMakeDemoszene <Programmierung>MetadatenWINDOWS <Programm>CMakeProgramm/QuellcodeXMLComputeranimation
40:23
Gebäude <Mathematik>WINDOWS <Programm>CMakeLINUXSchnittmengeGroßrechnerCompilerDateiCompilerVariableDateiComputeranimationProgramm/Quellcode
41:20
ThumbnailCMakeDateiSchnittmengeQuellcodeGroßrechnerWINDOWS <Programm>makeProgramm/QuellcodeComputeranimation
42:34
DateiQuellcodeCMakeSchnittmengeMessage sequence chartNetbook-ComputerWindows <Zweiunddreißig Bit>WINDOWS <Programm>Programm/QuellcodeComputeranimation
43:20
CMakeWINDOWS <Programm>LINUXSchnittmengeCompilerProgrammSoftwareCMakeParametersystemComputeranimation
44:11
CMakeSoftwareGebäude <Mathematik>DateiThumbnailWIN32 <Schnittstelle>Netbook-ComputerDateiParametersystemComputeranimationProgramm/Quellcode
47:33
Chatten <Kommunikation>ZahlmakeSoftwaretestProgramm/Quellcode
50:30
ThumbnailDateiCMakemakeSoftwareRegulärer AusdruckDateimakeSoftwaretestProgramm/QuellcodeComputeranimation
51:16
SoftwareServerHTTPCMakeDownloadingOpen SourcemakeThumbnailDateiRegulärer AusdruckXMLComputeranimationProgramm/Quellcode
52:02
LastMultiplikationDatenmodellLineare RegressionProject <Programm>SupercomputerCodeCMakeRepository <Informatik>DatenanalyseEASY <Programm>AnalysisProviderAbsoluter UmgebungsretraktQuellcodePlug inGERTLINUXDebian GNU/LINUXmakeWeb SiteGebäude <Mathematik>Windows SDKTermWINDOWS <Programm>SoftwaretestOpen SourceComputeranimation
52:55
Gebäude <Mathematik>CMakeServerHTTPSoftwareOpen SourceDownloadingWeb SitemakeTermDebian GNU/LINUXLINUXDeterminanteAnalysisOISCHTTPmakeComputeranimation
53:43
AnalysisDebian GNU/LINUXEditorTouchscreenHTTPSoftwareOpen SourceCMakeDownloadingServermakeGebäude <Mathematik>HilfesystemModulComputeranimationXML
54:27
openSUSEVorlesung/KonferenzComputeranimation
Transkript: Deutsch(automatisch erzeugt)
00:08
So, ich sage herzlich willkommen, herzlich willkommen zu meinem Vortrag über CMake, Bildsystem und mehr. Ich möchte jetzt in einer knappen Stunde das Bildsystem CMake
00:22
vorstellen und ich fange gleich einmal an mit der Frage, wer entwickelt denn selbst Software? Ja, das ist schonmal eine sehr gute Sache. Wer verwendet CMake schon? Ja, sehr gut, ein sehr guter Anteil. Ja, Bildsystem und mehr. Fangen wir ganz kurz an. Was haben
00:47
wir heute am Programm? Erstens natürlich CMake. Wie baut man einfache Programme mit CMake? Was kann man gegebenenfalls noch alles machen? Das zweite ist das CPEG. Wie kann man
01:01
Software paketieren? Also zum Beispiel RPM-Pakete bauen, Nebium-Pakete bauen, Target-Z-Pakete bauen, ist im Prinzip mehr oder weniger alles vorhanden. C-Test, wie kann man automatisiert Software testen? Und ganz am Schluss zeige ich noch C-Dash,
01:21
ein bettbasiertes Dashboard, um die Test- und Bildergebnisse zu veranschaulichen. Ja, was ist CMake? Es ist ein Higher Level Build Tool, also nicht vergleichbar mit Make zum Beispiel, sondern eher mit S-Cons oder Auto-Make-Auto-Conf. Und ja, wie schon erwähnt,
01:50
ein großer Teil wird auch paketieren und testen sein. Und ja, was kommt raus? Es kommen quasi meinetwegen Make-Files raus. Das geht ähnlich wie bei Auto-Make. Ich rufe erst Confi
02:02
auf und dann anschließend Make. Auto-Make generiert mir ein Make-File und das Ganze macht CMake auch. Wobei, CMake kann auch für andere Plattformen, für andere Projekte Konfigurationsdateien erstellen. Ich würde sagen, einen ganz kurzen Beispiel mit Code
02:23
Logs zeigen. Wo wird CMake verwendet? Eigentlich immer mehr als große Projekte, die das Ding verwenden, ist KDE ab Version 4. Die haben das komplette riesen KDE-Projekt von
02:42
Auto-Make auf CMake umgestellt. Und das war ziemlich ein großer Aufwand. Da ist auch die Datenbank, Screbos, etliche andere Software verwendet das auch. Ich habe es in Verwendung
03:04
für WX Maxima. Das ist ein Projekt, wo ich ein bisschen mitprogrammiere. Da gibt es halt am späteren Nachmittag noch einen Vortrag dazu und auch bei Maxima wird das verwendet, um einen Windows-Installer zu bauen. Also ich habe es aktiv auch in Verwendung. Ja,
03:21
wie schaut so ein ganz einfaches Projekt aus? Ich habe das dann auch noch live als Beispiel. Das Projekt bekommt einen Namen, Project Hello World. Kommentare werden einfach mit Gitterzeichen hinzugefügt, wie bei Shell-Skripten zum Beispiel. Ja, dann gebe ich an,
03:40
welche Version von CMake erwarte ich mindestens. Hier Version 3.5. Und anschließend brauche ich mir aus der C-Datei helloworld.c ein executable. Das soll bitte Hello World heißen. Und anschließend installiere bitte dieses Target, das du gerade gebaut hast, nach bin,
04:04
würde dann eben zum Beispiel nach user local bin Hello World installiert werden. CMake-Funktionen, das ist im Prinzip alles eine Funktion. CMake-Minimum-Required at executable sind case insensitive. Es hat sich zu Beginn oder früher bei Usus im Prinzip alles großschreiben und
04:29
ja das hat sich in der letzten Zeit gewandelt. Man soll bitte alles, also die CMake-Funktionen kleinschreiben und ja Variablen sind dann case sensitive. Hier habe ich gar keine Variable.
04:44
Und die CMake-Funktionen, wie gesagt case insensitive, Großkleinschreibung ist egal, weil man früher eben, hier habe ich zum Beispiel Großgeschrieben-Project, weil man früher eben alles großgeschrieben hat. Ich mache noch einmal ein ganz kurzes Live-Beispiel. Ich habe ein paar Beispiele vorbereitet. Die Folien gibt es auch auf
05:04
Frostcon Seiten. Die Beispiele noch nicht. Ja, da muss ich mir das ganze Ding im Prinzip anschauen. Ich habe hier zum Beispiel ein Hello World. Da habe ich eben eine Readme-Datei. Ja, das ist eine Readme-Datei. Ich habe die CMake-List. Das ist ziemlich das,
05:28
was ich jetzt geschrieben habe. Da habe ich nur eine ältere Version als Minimum drin und eben ein minimales C-Programm. Ja, bei CMake, wo baut man das ganze Ding? Bei
05:42
Configure kennt man das ganze Ding einfach . slash Configure und alles wird im Source Code Verzeichnis gebaut. Geht bei CMake auch. Ist eigentlich sehr unüblich und ich sage gleich noch aus beiden Gründen. Man nimmt in der Regel ein Bildverzeichnis. Entweder
06:06
ich habe das Bildverzeichnis im Source Code Verzeichnis oder ein Verzeichnis drüber, Bild. Gut, da ist jetzt irgendwas drin. Das lösche ich mal alles weg. Also, man muss aufpassen, dass man das R1-RF-Stern dann im richtigen Verzeichnis macht. Aber,
06:25
habe ich jetzt hoffentlich gemacht. Mein Bildverzeichnis, hier ist leer. Kann man das gut sehen, von hinten auch? Schreibt größer? Ja. Ja, was mache ich? Ich rufe CMake auf und ich gebe an, wo liegt mein Source Code. Ein Verzeichnis drüber, das ist mein Beispielprogramm
06:46
und Hello World ist mein CMake, mein Source Code Verzeichnis. Ja, was macht er? Erst sucht er die Compiler. C Compiler, XX, also C++ Compiler. Gut, hat er beide gefunden. Er hat kurz
07:06
getestet, ob die wirklich funktionieren. Dann Configuring Done, Generating Done and Build Files have been written to, also in das Verzeichnis, wo ich gerade bin. Und wir sehen schon, hoppala, es ist auch ein Makefile dazugekommen. Das kann ich jetzt,
07:24
das ist relativ lang, aber ist auch bei Automake relativ lang. Ja, ich habe erst einmal Make Help, zeigt mir an, was könnte ich alles bauen und Make wird das ganze Ding bauen und ich habe
07:48
dann mein Hello World und das ist dann mit Hello World aufrufbar. Hello World. Was ich könnte, könnte ich entweder mit sudo machen oder ich gebe quasi an, make install,
08:06
das dir ist gleich, ich schaue einmal root und dann wird quasi root jetzt als Verzeichnis
08:20
da im Prinzip angelegt und darunter unter User Local Bin wird das Hello World Programm installiert. Was ich eben da im Hello World, Sie mit List angegeben habe, installiere das Tagetagetag Hello World in die Destination Bin, das Standardpräfix ist User Local Bin
08:43
als User Local und da eben in das Verzeichnis Bin wird das Programm hinein installiert. Ja, da habe ich jetzt noch nicht dabei, dass ich z. B. die Readme Datei in auch local doc, wohin man ihn installieren könnte. Schauen wir mal weiter. Ja, wir haben gesagt,
09:10
der Source Code wird in der Regel nicht, es wird nicht im Source Code der Rectory gearbeitet. Das heißt, es wird auch nicht verschmutzt. Ich sage es mal, verschmutzt der Source Code der
09:23
Rectory. Ich brauche kein irgendwie make clean oder make this clean, weil ich lösche einfach im Bildverzeichnis weg und habe das Problem gelöst. Das ist quasi mein make clean. Man kann das ganze Ding auch im Source Code der Rectory machen, aber es macht keiner,
09:45
wenn er sie make verwendet. Was hat das noch für einen Vorteil? Ich kann mehrere Bilds gleichzeitig bauen. Ich habe ein Verzeichnis, meinetwegen Bild, ein Verzeichnisbild 64. Ich baue mir erst ein 64-bit und ein 32-bit executable gleichzeitig. Wenn ich im Source
10:07
Code der Rectory arbeiten würde, dann müsste ich erst das make clean aufrufen, um die generierten Dateien wieder wegzulöschen. Und ich kann so meinetwegen ein Bild 64, ein Bild 32 Verzeichnis machen. Ich kann einen Debug, ein Releasebild machen. Ich kann 20
10:23
Bilds mit verschiedenen Compilern probieren und es kommt sich nichts ins Gehege. Nennt sich dann eben Out-of-Source-Bild. Das ist im Prinzip das ganze Ding, was ich gemacht habe.
10:48
CMake, Punkt, Punkt und dann eben das Hello World Verzeichnis. Er sucht z. B. einen um die Bildschritte genau zu sehen, also die Compiler-Aufrufe. Und make install habe ich
11:08
dann auch aufgerufen, müsste ich halt gut aufrufen, wenn ich kein Destination-D angebe, weil ich nach User-Local bin, in der Regel keine Schreibrechte habe. Was auch sehr oft gefragt wird, deswegen steht das gleich hier in roter Farbe. Wenn ich hier bei CMake
11:25
Minus die, also ich addiere eine Definition. CMake install prefix pass ist gleich my pass angebe. Das entspricht dem Minus Minus prefix bei Automake. Also wenn ich es nicht nach User-Local
11:44
installieren will, sondern nach User, nach Opt, nach wo hin auch immer in mein Home-Verzeichnis, gebe ich das quasi auf der Kommando zu lernen. Ich mache das Ding gleich noch einmal. Also ich spiele mein Bild-Verzeichnis weg. Minus die, das gleiche wieder. Er hat da keine CMake-List-Datei
12:23
gefunden, weil ich bin im Bild-Verzeichnis und ich gebe dann noch an und für sich, wo will ich das ganze Ding hin haben. Ich bin wieder beim Hello World Beispiel. Er sucht das ganze Ding. Gut, make und make install, installiert das ganze Ding dann in mein Home-
12:44
Make install. Nach Home daute, meine Username auf dem Rechner, bin Hello World. Also da kann ich dann auch ohne Route an und für sich problemlos installieren. Ja, wir haben das ganze Ding jetzt
13:11
gesehen auf der Kommandozeile. Einfach CMake aufrufen und fertig. Es gibt zwei weitere Oberflächen dazu. Ich lösche das Ding wieder einmal weg, nämlich CCMake. Das ist
13:27
eine Ncurses-basierte Oberfläche. Punkt, Punkt, Hello World noch einmal. Ja, da sehe ich NT-Cache, ja. Und ich würde da sagen, da bin ich jetzt, das ist ein vieler Blödsinn. Er hat
13:48
jetzt natürlich nichts gefunden, also quit. Ich muss zum Hello World-Verzeichnis natürlich
14:01
angegeben. Also, Configure macht das ganze Ding mit einer Curses-Oberfläche, gibt mir das ganze Ding aus und ich sehe, hoppala, er hat gewisse Cache-Variablen generiert. Die macht er auch beim Bauen mit den Kommandozeilen CMake und ich kann die jetzt zum Beispiel
14:21
ändern. Und wenn ich sage, hoppala, ich hätte das ganze Ding gern enter to edit. Ja, installiert bitte nach dmp. Ist ja wurscht wohin. Dann würde er das nach dmp bin an und für sich installieren und jetzt habe ich das Ding geändert. Sehr gut und Toggle
14:47
Advanced Mode. Ich habe noch viel mehr Variablen als ich hier sehe. Ja, zum Beispiel den Compiler, den er gefunden hat etc. Irgendwelche Flags, die er ersetzt oder so, braucht man in der Regel nicht, aber es gibt, wo ist das Mech-Programm etc. Braucht man im Prinzip
15:04
nicht, also ich schalte das wieder ab. Wesentlich ist es dann für sich, die Cache-Variablen, die es hier gibt. Gut und dann, da habe ich geändert. Gut, ja. Und dann kann ich eben standard wieder das ganze Ding angeben, generieren, dmp habe ich gesagt, will ich
15:30
das ganze Ding haben. Configure. Und kann das ganze Ding dann generieren. Es gibt
15:43
noch ein weiteres. Ich zeige das mal. Das ist die nächste Folie, was es auch noch gibt, was man auch ganz gut verwenden kann. Das ist die Curses, habe ich sehr selten in Verwendung. Es gibt noch eine QD-basierte Oberfläche. Die zeige ich auch noch mal ganz flott. Ja, da habe ich hier, den Cache hat er jetzt dann ausgelesen, wenn ich
16:13
angebe. Ich gebe hier das Bildverzeichnis an, also wo ist das Haus, wo ist das Bildverzeichnis, kann ich hier quasi ändern. Ja, und anschließend Configure und Generate baut
16:27
mir dann die, da kann ich irgendwo noch die Warning-Messages anzeigen, etc., baut mir dann das Projekt. Es generiert dann wieder das Make-File. Kern-Generator, man
16:44
sieht Unix-Make-Files. Und das sollte ich dann haben. Genau. Und mit Make kann ich das ganze Ding bauen. Make-Install. Ich habe das jetzt noch dmp gebaut. Also wird dann noch dmp-bin, das Ding installieren. dmp-bin-hello-world. Hat er da im Prinzip
17:04
installiert, weil ich das quasi beim Konfigurieren angegeben habe. Ja, das sind relativ einfache Programme. Hier und da braucht man halt mehr. Man kann gewisse Variablen setzen,
17:23
zum Beispiel eine Liste von C-Programmen. Man kann das ganze Ding zum Beispiel mit File-Glob, Hello World Sources, wenn ich mehrere C-Files habe, kann ich mir das so generieren. Und ja, Execute-Table, haben wir schon gesehen, wie man das ganze
17:47
Ding macht. Ich kann Libraries generieren, mit Art-Library, Static oder Shared und dann die Source-Files angeben. Wichtig hier, beim Bibliotheks-Namen gebe ich, und auch
18:03
beim Execute-Table-Namen, lasse ich ein Suffix weg, was zum Beispiel DLL oder .a, .so etc. wäre, hat den Vorteil, sie mich ergänzt das automatisch und ich bin damit plattformunabhängig. Ich kann das ganze Ding unter Windows ausführen und er ergänzt
18:26
auch automatisch das Excel, das DLL, was ich ebenso brauche. Ich glaube, da habe ich
18:48
lib, ja. Was habe ich hier? Ich habe im lib-Verzeichnis ein hello.c und hello.h. Ja,
19:03
das bringt Hello World, fertig. Und das .c definiert die Funktion, gibt einen String aus und fertig. Das C-Mech-List ist auch relativ einfach in diesem Fall. Wir haben da schon gesehen,
19:20
ich habe ein Unterverzeichnis Static und ein Unterverzeichnis Shared. Und die werden einfach eingebunden mit Ad-Subtractor Shared und Static. Und in diesen Unterverzeichnissen, da ist jetzt noch irgendwie der Quellcode, also in die Variable lib-source. Und im Unterverzeichnis Static steht dann drin, hapala, baue mir die Library
19:52
hello, also lib hello, als statische Library. Und im Unterverzeichnis Shared,
20:03
da habe ich auch nur ein C-Mech-List drin, sonst nichts. Ja, und da steht im Prinzip auch, baue mir eine library hello world Shared. Was habe ich da noch irgendwie? Ja, da habe ich den Output-Name noch umgesetzt auf hello, weil ich habe da quasi, ansonsten müsste ich
20:21
die irgendwie anders benennen. Und so kann ich sagen, hoppala, ist ein anderes Verzeichnis, ich ändere die Output-Name wieder in hello zurück, weil ich die oben in hello Shared benannt habe, weil ein Target muss mehr oder weniger eindeutig sein. Ja, da haben wir nix mehr drin.
20:44
CMech.lib, erfindet den Compiler, das ist ok. Und ich mache jetzt wieder das Make, ich gebe diesmal noch an, wer will gleich eins. Was ich hier nicht dabei habe,
21:02
ist irgendwie die Library irgendwo hin zu installieren, gleich eins. Da bekomme ich die ganzen Compiler-Ausgaben und am Schluss linkt er mir erst einmal die statische Library,
21:22
weiter oben generiert er die Shared-Library und irgendwo generiert er da vorne noch das Object-File. Gibt mir das ganze Ding an für sich. Ja, und was habe ich? Das ist gleich eins, das brauche ich dann nicht mehr. In Shared hat er mir eben die lib-hello.so,
21:45
die Shared-Library generiert und im Unterfass eine Static habe ich die lib-hello.a, also die statische Library. Hat hier natürlich nur eine C-Datei, könnte natürlich wesentlich
22:06
mehr Dateien umfassen. Man möchte in der Regel nicht alles selbst machen. Ich meine, ist schön. Aber es gibt 100.000 Libraries am System und ich will die irgendwie finden
22:22
und irgendwie verwenden. Das ganze Ding geht mit find-package und dann gebe ich an den Namen und da kann ich noch angeben, ist das ganze Ding notwendig oder optional. Also er bricht ab, wenn es nicht vorhanden ist und ansonsten würde er quasi einfach ohne die Library
22:45
weitermachen, wenn es optional ist. Es werden in der Regel folgende Variablen gesetzt. Name found. Name ist dann die Library, die ich gesetzt habe. Wenn ich lib-sdl suche, wird es dann sdl-found heißen. Das libraries-includes ist leider nicht hundertprozentig eindeutig.
23:05
Manchmal heißt die Variable irgendetwas-library, manchmal heißt sie irgendetwas-includes. CMake hat eine relativ umfangreiche Dokumentation. Entweder CMake-self-module, find den Namen,
23:22
prüfen wir einmal aus. Sdl habe ich erwähnt, um die lib-sdl zu finden. Gibt an und für
23:45
sehe ich aus, welche Variablen gesetzt werden. Sdl-library, sdl-found ist false, wenn es nicht gefunden wird. Das kann man dann abfragen. Wo ist das Includerector und die Version bekomme ich auch noch geliefert, um eben zum Beispiel die lib-sdl zu finden. Und das Ganze
24:13
gibt es. Ich habe das jetzt wahrscheinlich da nicht. Für 100.000 Libraries gibt es
24:20
definierte Module. Warte, ich kann das mal zeigen. Ja, ich sehe die ganzen Module,
24:41
die ihr hier findet. Und ja, es sind wirklich fast alle Systembibliotheken für sich verfügbar, auch Programme wie Knoblot oder was auch immer. Ja, die sind quasi alle verfügbar, die kann ich alle finden. Und da gibt es überall die Dokumentation dazu, wie ich GTK, LibTIV, was auch immer, ich halt brauche, um das ganze Ding zu finden. Ich bekomme da
25:03
immer die Information, welche Variablen gesetzt werden, und die kann ich dann später auswerten. Auch Programme kann ich finden, Subwärchen, wenn ich es brauche, Blablabla, Matlab, wenn ich es brauche, ja, was auch immer. Also, das ist wirklich für einen MPI,
25:23
um parallel zu programmieren. Ja, das gibt es wirklich quasi für fast alles. Und die Variablen werden dann gesetzt und können quasi ausgewertet werden mit if, wenn die Variable, ja. Genau, wir machen das einmal, was habe ich jetzt zum Beispiel nicht drauf. Es hängt
25:50
auf und ab, wenn ich da gesagt habe, es ist required, dann bricht CMAC sofort ab. Wenn ich sage, hoppala, es ist nicht required, also nicht unbedingt notwendig,
26:01
dann macht er weiter, schreibt raus, hoppala, das Ding wurde nicht gefunden, setzt die Variable name found auf false, und ich kann die dann auffragen, später wurde die Text gefunden, wenn ja, nehme noch die Sourcesfile hinzu, linke diese Library, wenn nein, mach das halt nicht. Ach so, okay, Entschuldigung, habe ich nichts. Also,
26:41
es gibt die Möglichkeit dann auch, habe ich jetzt zugeben lassen, selbst nicht gemacht, dass man einfach sagt, hoppala, das ist der Name der Library, der gefunden werden soll, die heißt libfrostcon, und sucht sie üblicherweise in diesem Faden oder so, und sucht diese oder jene Hedder-Datei, die auch benötigt wird, frostcon.h,
27:06
und könnte man sich so selbst schicken, auch die ganzen Paketnamen, die man hier findet, ich schaue mal, ob ich das irgendwo zeigen kann. Das ist die Hilfe, das brauche ich nicht.
27:26
Ja, ich nehme dann wieder STL, da habe ich eben das Find STL, oder eben zum Beispiel, das ist eben auch in Siemec geschrieben, und ja, sieht dann im Prinzip so aus, ich gebe den Pfad an, wo kann man die Variable üblicherweise finden,
27:43
wie heißt die Hedder-Datei, die er suchen soll, gegebenenfalls setzt eben die Variable ein, und so könnte man sich das ganze Ding selbst schicken, das ist nicht besonders lang, ersetzt dann eben gegebenenfalls irgendwie die Variable in meiner Version major,
28:06
würde ich bei eigenen Library nicht brauchen, und gibt dann eben im Prinzip an, hoppala, wenn die, also hier wird noch Apple behandelt, if not Apple, dann mach das, if min gv, also wenn man das min gv-System für Windows verwendet, mach das etc., braucht man dann
28:24
in der Regel wahrscheinlich nicht, und würde dann quasi auch vorangeben, hoppala, ja, was wird dann quasi dazugelinkt, STL oder STL-Menu, wie auch immer, könnte man sich selbst schreiben, manche Pakete liefern sowas auch direkt mit, so ein Subpaket für CMake,
28:48
ja, um das ganze Ding dann direkt zu, damit man es selbst übernehmen kann, das eigene Projekt. Genau, wie verwendet man das ganze Ding, das habe ich jetzt schon
29:06
für Sie ganz kurz gezeigt. Include, da recht da ist, ergänzt den Include-Pfad, und da würde ich dann quasi eben STL für lib-STL, also STL-Includes dazunehmen,
29:23
um eben, falls die lib-STL irgendwo speziell installiert ist, würde er dann im C-Programm suchen, das ist quasi das Minus-i, was man angeben kann beim Compileraufruf. Ja,
29:41
wie kann ich eine Bibliothek linken? Ich kann entweder sagen, ein Target, sprich ein C-Programm oder eine Library, die ich baue, wird gegen zum Beispiel STL-Libraries gelinkt, oder ich kann sagen, hoppala, Link-Libraries, ja, das würden dann alle Targets, die würden gegen diese Library gelinkt werden. Und ich kann auch noch,
30:02
oder sollte auch noch gehen, jedenfalls Compiler-Definitionen ergänzen, falls die irgendwelche speziellen Flags erforderlich sind, kann ich noch sagen, STL-Definitions, und ich habe das jetzt quasi eh schon gezeigt, wird er dann eben dementsprechend ergänzt werden.
30:37
Ja, habe ich im Prinzip schon gezeigt, wie man das ganze Ding dann auch externe lib ist,
30:48
das glaube ich. Da habe ich eben hier gesagt, hoppala, ich habe eben die lib-STL verwendet,
31:00
und die soll er dann bitte finden, und das Hello World soll er dann linken. Ja, und wenn ich dann mit Aufruf, Punkt, Punkt, externe lib, da sehe ich dann quasi auch beim Aufruf, hoppala, er sucht nicht nur den Compiler, sondern, die müsste jetzt kommen, er sucht
31:21
gewisse andere Sachen, zum Beispiel lib-STL, hat er gefunden, er braucht noch bs-res in diesem Fall, hat er auch gefunden, und er baut mir das ganze Ding dann und könnte ich dann kompilieren, und er hat mir das ganze Ding gelinkt, gibt ihm dann an, hoppala,
31:47
er hat irgendwie, was weiß ich, für Libres alle dazugelinkt, irgendwo muss lib-STL sein da, die er dann eben benötigt. Ja, soviel zum Thema CMAC. Visual Studio, ja, auch da ist CMAC
32:10
inzwischen eingebaut, das habe ich jetzt nur als Screenshot dabei, ich habe das logischerweise hier nicht installiert. Ich habe da noch diesen Blogbeitrag da irgendwie verlinkt,
32:20
wo ich den Screenshot herhabe, und auch hier kann man eben mit CMAC bauen, testbauen etc., welchen ich noch weiß, ich hoffe, ja, da ist Internet. Sollte man das ganze Ding dann da finden, ich glaube, da ist auch wohl habe ich Internet. Das ist dieser Blogbeitrag,
32:46
wo das eben beschrieben wird, wie das ganze Ding funktioniert mit Video und allen möglichen. Gut, da war wieder weg. Sprich, es geht auch, und das generiert dann eben quasi direkt die
33:02
Visual Studio Projekte, die man eben haben will. Wie das ganze Ding mit der Installation geht, habe ich schon gesagt, also runtime destination bin, und ich sage dann, eine Library installiere ich mir ins Verzeihungslib, eben zum Beispiel userlocallib,
33:20
oder libpistatic, wohin auch immer. Ich kann da ein Datein einfach mit install files generieren, und Directories, ganze Directories mit directory destination, wohin auch immer. Das Präfix, das ich vorhin angegeben habe, also entweder userlocal, oder was ich mit CMAC install
33:41
Präfix angegeben habe, wird standardmäßig immer vorgesetzt. Das heißt, man sollte da hier auch nur eine relative Pfade angeben. Ja, wir kommen zum, was bei Automake zum Beispiel
34:01
nicht dabei ist. Ich möchte das Software nicht nur installieren und bauen, ich möchte ich möchte EVM-Pakete, Tagitsets, was wir immer haben. Das geht bei CMAC relativ einfach. Es gibt ein Paket includes CPEC, und wenn ich das angebe, kann ich zum Beispiel hier Tagitset,
34:22
Tagitset BZ2, also BZip2, Zip-Insourcepakete habe ich ja auch noch angegeben, die ich anbauen kann. Und ich gebe hier zum Beispiel Dateien an, die gibt oder Subversion oder sowas, was halt irgendwie nicht inkludiert werden soll. Und dann bekommt das Ding nur einen
34:43
Namen und Make Package Source, baut dann das ganze Ding. Ich habe das Punkt Punkt Source-Pakete, ja. Ist wieder eine CMAC-Datei, eine main.c, eine readme.dxt, mir umfasst das Ganze nicht.
35:01
Und die main.c interessiert mich jetzt nicht. Die CMAC.dxt interessiert mich. Was steht da drin? Ja, eben diverse Variablen, wo das ganze Ding hingebaut werden soll und dass ich eben gegebenenfalls diverse Direktor ist. Ja, da geht's mit, ja, das Binärpakete genau nicht
35:36
mehr, oder? So, warte mal, ich mache mal eine Source-Pakete. Ja, Datei geschrieben, hoppala,
35:42
irgendwas, das Source, was auch immer, das not match, und das ist da, weil ich jetzt ein anderes, also weil ich mein Bild der Richterin nicht aufgeräumt habe. Mach ich mal, also alles weg. Ja, das geht ganz normal. Und was ich hier dann sehe, hoppala, was da zugekommen ist
36:02
mit Make Help, ich kann irgendwie Make Package, Make Package Source machen. Das weiß ich nicht, dass man das haben wollte, ich wollte das Package Source, so. Und dann hat er mir generiert erst einmal ein Daten-Z, eine ZIP-Datei, er hat mir generiert irgendwie
36:26
ein Shell-Script, das das Ding automatisch installieren würde und irgendwo ein Tage-Z habe ich da auch noch irgendwo dabei. Also, die Dateien hat er mir im Prinzip alle erzeugt und wenn ich mir das Ding anschaue, dvf, ja, ist eben im Versions-, also, wie heißt das Ding,
36:52
welche Version hat das Ding, die Readme-Datei, die Simeklisp und die DC-Datei, die ich gebaut habe, sind dann da drin. So viel zu Source-Code-Paketen, wie gesagt,
37:09
in unterschiedlichen Dings, Tage-Z, das gebe ich da an, welche Formate ich da haben will. Binär-Pakete, ja, im Prinzip ähnlich, ich setze auch hier wieder diverse, gebe an,
37:24
was hätte ich gern, ich hätte ein Tage-Z, ein DAPZ2, eine ZIP-Datei, also binäre jetzt und ich hätte gern devien- und rpm-Pakete. Da kann ich da noch angeben, was im rpm eben drin steht, wer hat das gebaut, eine Description, ein Lizenz-File, was auch immer,
37:47
eine Section, das dann gegebenenfalls eben installiert werden würde und am Schluss das und dann machen wir das ganze Ding einmal, ich lösche das Bildverzeichnis wieder,
38:10
binär-Pakete, da habe ich eben jetzt einen Lizenz-File, eine Readme-Datei, ja, zwei C-Dateien und eine .h-Datei, ich baue die Dinger wieder weg, gut,
38:30
und jetzt Make Package, ich habe hier ein Ubuntu-System und der baut man irgendwie trotzdem, also erstmal das devien-Paket, das ich haben will, das Tage-Z, da BZ2
38:49
und auch das rpm-Paket hat man hier auch auf Ubuntu im Prinzip erzeugt, weil ich das Paket-rpm-Bild dabei habe und ich kann da quasi angeben, dass ich meine Pakete,
39:00
rpm-qip, nehmen wir mal das rpm-Paket, ja, da stehen die Metainformationen drin, die ich hier quasi als variablen gesetzt habe und qlp wird dann quasi angeben, welche,
39:21
was ist das, wo das jetzt herkommt, weiß ich nicht genau, aber an und für sich, ich habe das Lizenz-File, was ich quasi installiere standardmäßig, ich habe das ich installiere standardmäßig, gibt er mir da quasi im Prinzip im rpm-Paket an und ja,
39:42
es gibt noch die zweite Möglichkeit, das kann ich hier nicht live vorführen, Binär-Pakete gehen mit dieser Art und Weise nur mit Source-Pakete, es gibt ein Paket use-rpm-tools, da könnte man auch Source-rpm-Pakete bauen, also aus denen dann quasi mit rpm-minus-minus-rpm-Bild
40:07
das ganze Ding gebaut werden kann, das geht nicht auf Ubuntu, ja, weil CMake als rpm-Paket erwarten würde, aber ging ja auch. Cross-Compiling, ja genau, wir wollten noch immer
40:23
einen Windows-Installer bauen. Wir machen das ganze Ding wieder. Und wie mache ich das? Ich gebe quasi einfach an, hoppala, da habe ich so eine Tool-Chain, Min-GW, ja, da gebe ich an, bitte
40:45
diesen Compiler verwenden und ja, wo suchst du bitte sources-Pakete, gegebenenfalls eben in Unterverzeichnis. Dann habe ich da irgendwo was vorbereitet, Cross-Compiling, ja, ist eben eine
41:07
Ritmin-Datei und die CMake-List, die schaut an und für sich ganz normal aus, also da ist nichts Besonderes drin. Also ich habe hier die Variablen so schon gesetzt, das heißt, ich
41:22
brauche das Tool-Chain-File gar nicht, ich brauche das ganze Ding für Windows, das ist im Prinzip so gesetzt, ja, CMake, Punkt, Punkt, ja, habe ich das jetzt gelöscht, ja. Also ich gebe mir quasi an, ich verwende den anderen Compiler, den hat er eben hier gefunden, das ist der
41:47
Cross-Compiler, nicht der übliche Linux-Compiler. Make würde mir dann eben das Executable bauen, also helloworld.exe, das könnte man mit Wein ausführen, aber ich will eigentlich,
42:02
das ist jetzt nicht so gut, also gibt mir eben helloworld aus, was ich eigentlich haben will, ist ein Paket oder ein Installer, Make Package und das verwendet es Ansys, das ist der
42:21
Nullsoft Installer, den ich da verwenden kann, der läuft auch unter Linux, er generiert mir ein Center.exe, ja, nett. Das kann ich auch zum Beispiel üblicherweise unter Windows machen, aber auch mit Wein aufrufen und ich bekomme dann üblichen Clicky-Bunty-Installer,
42:42
wo ich sage, hoppala, ja, das ist das Programm Helloworld, hat die Lizenz GPL, die Lizenz nehme ich an, ja, bitte noch C Program Files x86 installieren, installieren, ja, fertig. Und dann hätte er mir das ganze Ding auch installiert, eben auch für Windows,
43:05
also würde man in der Regel nicht mit Wein machen, sondern direkt auf Windows kopieren. Ich mache das eben für das Maxima-Projekt, auch bei Cross-Compiling, da gibt es einmal am späten Nachmittag noch einen Vortrag dazu. Ich glaube,
43:21
das war es zum Thema Paketieren, genau, Testen, ja, wir haben im Prinzip einen Developer, der will das ganze Ding, dass das funktioniert, wenn man Tester, der will, dass das ganze Ding bricht. Wie kann man das mit CMake machen? C Test, ja, ich sage,
43:43
ich enable testing, und dann, was mache ich? Ich füge Test hinzu, sage das Programm, das ich gerade frisch kompiliert habe, wird mit gewissen Argumenten aufgerufen, und ja, wenn der Exit-Code 0 ist, bekomme ich das ganze Ding, ist das Ding ok? Und
44:04
wenn das Exit-Code ungleich 0 ist, das ist dann üblicherweise, irgendwas hat nicht funktioniert. Ich zeige das ganze Ding einmal flott. Was habe ich hier? Numerik, ich habe da
44:32
zwei Sachen vorbereitet. Das erste ist ja eine Funktion mal Punkt C mal Punkt H. Ja, das
44:44
quasi zwei Floating-Säulen werden multipliziert. Und ja, dann sage ich hoppala in CMake-List, gibt dann quasi im Prinzip aus, der Test ist ok, 1 mal 2, ich rufe das quasi mit den
45:05
Argumenten 1 und 2 auf, und es soll im Prinzip dann 2 so herauskommen, das wird dann ausgegeben, also als Regular Expression, ein zweiter Test, fehlerhaft, 1 mal 2 ist 2 und nicht 4. Also, es wird aufgerufen, das Programm mit diesen beiden Argumenten,
45:26
und das gibt dann quasi auf der Kommandozelle aus, machen wir mal, ob CMake, oder falsch
46:00
gemacht, vorbereitet, ja, das soll das Programm dann aufrufen und nach einem gewissen
46:25
Timeout irgendwie, also das soll 5 Sekunden warten. Ich probiere mal das aus. Ah, ich weiß
46:43
ja schon. Was habe ich falsch gemacht? Ich habe da vorhin mit cut irgendwie die Datei angegeben, und da habe ich im Prinzip das CMake-List.txt noch am Schluss dabei gehabt, gehört natürlich weg, ja, gehört natürlich weg, sondern nur das Direktore, wo das ausgeholt
47:05
ist. Dann soll das ganze Ding machen, dann hat er jetzt hoffentlich das Mac-File generiert. Ah,
47:57
okay, der hat das irgendwie da reingeschrieben. Ich glaube, das habe ich in dem Verzeichnis,
48:03
warte mal, ich glaube, da habe ich irgendwann einmal ein Insource-Bild gemacht, und das ist nicht das, was ich, CMake-Cache brauche ich nicht. Jetzt hat das ins Bildverzeichnis
49:02
reingeschrieben. Dann soll das immer noch einmal aufräumen, wenn man da vor der Konferenz fährt. Also ich habe da jetzt ein Programm mal, und wenn ich das irgendwie nur mit einem Argument aufrufe, gibt das im Prinzip aus drei Argumente notwendig. Ja, und wenn ich da im
49:23
Prinzip 4 x 4 angebe, brauche ich auch drei Argumente, und im Prinzip 4 x 4 ist 15. Es gibt im Prinzip das Ergebnis aus, und wenn ich da irgendwie 4 x 4 ist 16 eingibt, dann soll
49:42
das im Prinzip passen, und dann ist der Exitcode 0, und ansonsten sollte der Exitcode im Prinzip 1 sein, wenn der Test halt nicht passt. Also das überprüft, ob die erste Zahl in meiner zweiten Zahl gleich die dritte Zahl ist, und was ich da ist, dann habe ich
50:02
Make Help, gibt eben einen, ein zusätzliches Target, Make Test, hier, und das führt dann eben die Tests aus, die ich gegeben habe, und ich sehe hoppala, zu wenig Argumente, da hat er richtig reagiert, im Prinzip darauf soll er reagieren, zu viele Argumente, der Test
50:23
wird auch automatisch ausgeführt. Wenn es okay ist, passt, ja, numerisch ungenau und fehlerhaft, habe ich im Prinzip auch gemacht, und irgendwo habe ich einen Test mit Komma, schauen wir uns die Datei an. Sieht das numerisch, also das erste ist im Prinzip
50:42
Knapp-Burzler 2, mal Knapp-Burzler 2, ist ein numerischer Plungenau, und da habe ich hier 1,5 mit einem Komma geschrieben, statt einem Punkt, mal 2 ist zwar 3, aber ich habe eine falsche Eingabe gemacht, und gibt mir dann im Prinzip das ganze Ding Make
51:03
Test, da kann man hunderte Tests machen, und die quasi mit Make Test automatisiert ausführen. So, was haben wir noch im Programm? Man kann auch auf Regular Expressions im Prinzip testen, dass man sagt, hoppala, das Programm gibt irgendwas aus, und dann spricht das dieser
51:24
oder jener Regular Expression. C-Dash habe ich jetzt hier nicht live installiert, ist so ein
51:40
Grafisch dargestellt werden, das gibt es entweder öffentlich oder gegen Bezahlung eben, wenn man es im Prinzip selbst haben will. Da kann man im Prinzip sich einen Account anlegen,
52:01
und dann im Prinzip Bilder von was auch immer, ich suche mal irgendein Bild aus oder sowas, keine Ahnung, ich kenne das Programm nicht. Und da wird dann eben quasi angegeben, hoppala, bei den 64-Bit gab es irgendwie Fails oder so, und die werden quasi aus den
52:23
Bills und aus den Tests automatisiert generiert oder so, und hier mit Windows 10 hat das Ding im Prinzip funktioniert, ich habe hier beim Configure zwei Warnungen gehabt, und ist im Prinzip auch bei großen CMake, also alles von den Seitenentwicklern, kommt das Ding
52:42
auch vor, und da sehe ich, hoppala, irgendwas, irgendeine Old Policy wurde nicht eingehalten, wie auch immer. Ja, das ganze Ding kann man sich logischerweise auch selbst installieren, also ist auch freie Software und kann auch dann gelotet werden. Hier habe ich das ganze Ding noch im Prinzip angegeben, wie man das ganze Ding, das wird dann eben mit HTTP zum
53:03
Beispiel oder HTTPS oder wie immer, submitted und ergibt dann eben aus, hoppala, die Meldungen, die beim Bild, die beim Make und vielleicht die beim Test, falls mein Test definiert hat, würden dann im Prinzip ausgegeben werden, das sieht man dann eben, ich gehe dann mal zurück.
53:24
Quasi die unterschiedlichen Stages, also Configure, das ist der CMake-Teil, Bild, das ist der Make-Teil und Test, wenn ich eben die Test definiert habe, würden dann im Prinzip ausgegeben werden. Ja, da habe ich noch irgendwie einen
53:40
Event-Check noch dabei gehabt, also haben die Entwickler da gemacht. So, was habe ich noch? Genau, ja, ich bin an und für sich, wie kommt man zu Hilfe, es gibt eine umfangreiche Webseite, eine sehr umfangreiche Online-Hilfe im Prinzip zu
54:04
allen möglichen CMake-Versionen und mit Help, Helpful oder Help zu einem gewissen Kommando oder zu einem gewissen Modul findet man die Hilfe quasi direkt online, also kann man sich die direkt ausgeben lassen. Dann sage ich erstmal Dank für die Aufmerksamkeit
54:23
und gibt es noch weitere Fragen. Keine Fragen?