Build-System

Proggen.org - Lernprojekt: Duplikatefinder
Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: Build-System

Beitrag von fat-lobyte » Di Aug 10, 2010 10:26 am

Bebu hat geschrieben:Ich bin dafür, dass der BIN und der SOURCE Baum streng voneinander getrennt sind. Dadurch ist die Übersicht besser und man kann ganz einfach neu bauen, indem man BIN löscht.
Also alles, von der Executable bis zu den Makefiles getrennt von der Source
Da hat jemand CMake nicht so ganz verstanden ;-)

Das kannst du ganz unabhängig davon machen, wie das Build System aufgebaut ist. Mach irgendwo einen Ordner: dedupe_build

Code: Alles auswählen

mkdir /irgendwo/dedupe_build
cd /irgendwo/dedupe_build
cmake /wo/der/source/liegt/dedupe
make
Das Projekt wird jetzt schon getrennt vom Source gebaut, also /wo/der/source/liegt/dedupe bleibt unverändert, alle Dateien werden in /irgendwo/dedupe_build gebaut.
Die Frage ist: WO in /irgendwo/dedupe_build wollt ihr die Executables haben? in /irgendwo/dedupe_build/bin? oder in /irgendwo/dedupe_build?
Xin hat geschrieben:Mein Vorschlag wäre dem zu entsprechen: src, obj, bin.
Das soll heißen, alle Dateien die zurzeit in $PROJECT_ROOT liegen, kommen nach $PROJECT_ROOT/src?
$PROJECT_ROOT/bin wäre in Ordnung, allerdings bin ich gegen $PROJECT_ROOT/obj, aus dem einfachen Grund dass jeder selbst entscheiden kann wo er sein Projekt bauen will. CMake erlaubt out-of-source builds, und diese sind auch zu bevorzugen. Ich mach immer das:

Code: Alles auswählen

mkdir $PROJECT_ROOT/build
cd $PROJECT_ROOT/build
cmake ..
make
Sollte sich jemand für in-source builds entscheiden (Sourceverzeichnis = Bauverzeichnis) kann ich schon was dazuhacken, dass die Dateien standardmäßig in build/ erstellt werden.
Xin hat geschrieben:Theoretisch kann man noch Header und Src trennen, dafür konnte ich mich bisher allerdings nicht begeistern.
Ich glaube das ist für den Fall, dass man Bibliotheken programmiert. Da kommen dann die Header in den include/ Ordner, allerdings nur diejenigen, die "exportiert", also von Benutzern der Bibliothek gebraucht werden. Interne Header bleiben in src/. (So will es der Brauch, glaube ich ;-) )
Haters gonna hate, potatoes gonna potate.

Benutzeravatar
Bebu
Beiträge: 562
Registriert: Mi Okt 21, 2009 6:19 pm
Wohnort: In der Nähe von Salzburg - Bin aber kein Österreicher!

Re: Build-System

Beitrag von Bebu » Sa Aug 14, 2010 8:20 pm

Ich hätte eine Anfrage für unser CMake Spezialisten. Könntet ihr bitte eine Möglichkeit einbauen, das sowohl ein Debug, als auch ein Releasetarget gebaut werden kann? Release ist noch nicht so wichtig, für Debug wären vor allem Wall-Flag, Debug Flag (ich glaube -g) und das weglassen jeder Optimierung (-O0 ? ) interessant. Ist das machbar?
Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: Build-System

Beitrag von fat-lobyte » Sa Aug 14, 2010 10:59 pm

Bebu hat geschrieben:Ich hätte eine Anfrage für unser CMake Spezialisten. Könntet ihr bitte eine Möglichkeit einbauen, das sowohl ein Debug, als auch ein Releasetarget gebaut werden kann? Release ist noch nicht so wichtig, für Debug wären vor allem Wall-Flag, Debug Flag (ich glaube -g) und das weglassen jeder Optimierung (-O0 ? ) interessant. Ist das machbar?
Das ist machbar, und zwar ohne Änderungen. Dazu müsst ihr nur ein Flag per Kommandozeile übergeben:

Für Debug Build: (ohne optimierung, mit debug symbolen)

Code: Alles auswählen

cmake -DCMAKE_BUILD_TYPE=Debug /pfad/zum/source
Für Release Build: (mit optimierung, ohne debug symbolen)

Code: Alles auswählen

cmake -DCMAKE_BUILD_TYPE=Release /pfad/zum/source
Achtung, die groß-klein-Schreibung muss genau eingehalten werden. CMake kennt nur "Release" und "Debug", nicht "debug","release", "DEBUG" oder "RELEASE". Seltsam, ist aber so.

Wie ich gerade festgestellt habe gibts noch nen "normalen" build, also ohne optimierung und ohne debugsymbole. Das wäre ohne Flag.


Was ich aber anbieten kann, wäre "Debug" als Standardeinstellung dazuzunehmen. Gewünscht?
Haters gonna hate, potatoes gonna potate.

Benutzeravatar
Bebu
Beiträge: 562
Registriert: Mi Okt 21, 2009 6:19 pm
Wohnort: In der Nähe von Salzburg - Bin aber kein Österreicher!

Re: Build-System

Beitrag von Bebu » So Aug 15, 2010 10:55 am

Von mir aus schon, wir sind ja schließlich noch meilenweit von einem Release entfernt ;)
Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: Build-System

Beitrag von fat-lobyte » So Aug 15, 2010 11:07 am

wie sehen das andere Entwickler?
Haters gonna hate, potatoes gonna potate.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Build-System

Beitrag von Xin » So Aug 15, 2010 12:36 pm

Aus Sicht einer Entwicklungsabteilung ist der Release wohl eher die Ausnahme.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: Build-System

Beitrag von fat-lobyte » So Aug 15, 2010 8:59 pm

fat-lobyte hat geschrieben:Was ich aber anbieten kann, wäre "Debug" als Standardeinstellung dazuzunehmen. Gewünscht?
Asche auf mein Haupt :oops:
Hab ein bisschen probiert, und Recherchiert und habe festgestellt: das geht gar nicht so einfach. Und mit "das geht gar nicht so einfach" meine ich, das geht gar nicht. Es gibt einen Hack, der hier beschrieben ist: http://permalink.gmane.org/gmane.comp.p ... user/15952
Allerdings ist er erstens sehr unschön, andererseits funktioniert er nicht immer.
Ich bitte also darum, dass diejenigen die wirklich vorhaben mit Debugsymbolen zu arbeiten CMake wie folgt aufzurufen:

Code: Alles auswählen

cmake -DCMAKE_BUILD_TYPE=Debug /pfad/zum/source
Zu den anderen Änderungen:
Ich habe das Verzeichnis "test" (mit zugehörigen CMakeLists.txt) erstellt, es soll alle Testexecutables beherbergen. Das habe ich auch in den Haupt-Build eingeklinkt,
ALLERDINGS: als EXCLUDE_FROM_ALL, das bedeutet dass die Tests nicht gebaut werden, wenn man nur "make" oder "make all" eingibt. Das betrifft gerade "scanner", filesearch/main.cpp habe ich nach test/testfilesearch.cpp verschoben, diese wird auch standardmäßig nicht gebaut. Will jemand das ding bauen, bitte
"make scanner" benutzen.

Over and out.
Haters gonna hate, potatoes gonna potate.

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: Build-System

Beitrag von fat-lobyte » Mo Sep 06, 2010 1:11 pm

Hallo an die lieben Mitentwickler,

wer sich schon mal gefragt hat was dieses komische "CMake" dingsda ist, ich habe eine nette Präsentation gefunden, die einen kleinen Überblick über CMake/CTest/CPack gibt:

http://www.kde.org/kdeslides/CampKDE201 ... anwell.pdf

Bei Gelegenheit mal durchblättern!

mfg, fat-lobyte
Haters gonna hate, potatoes gonna potate.

Benutzeravatar
Bebu
Beiträge: 562
Registriert: Mi Okt 21, 2009 6:19 pm
Wohnort: In der Nähe von Salzburg - Bin aber kein Österreicher!

Re: Build-System

Beitrag von Bebu » Do Jul 14, 2011 10:33 pm

Ich möchte unseren Bild-Experten daran erinnern, das uns noch ein find_package für Sqlite fehlt. Ich habe heute vergeblich versucht, so etwas einzubauen und hoffe jetzt, dass du mehr Erfolg hast, als ich.
Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: Build-System

Beitrag von fat-lobyte » Fr Jul 15, 2011 9:10 am

Bebu hat geschrieben:Ich möchte unseren Bild-Experten daran erinnern, das uns noch ein find_package für Sqlite fehlt. Ich habe heute vergeblich versucht, so etwas einzubauen und hoffe jetzt, dass du mehr Erfolg hast, als ich.
Wird erledigt, richtzeit Wochenende. Ich bitte dann um ganz viel Testen auf ganz vielen Systemen mit ganz vielen Versionen.
Haters gonna hate, potatoes gonna potate.

Antworten