Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Strike

Frischling

  • »Strike« ist der Autor dieses Themas

Beiträge: 36

Wohnort: Wien 1200 und Techelsberg 9212

Beruf: Junior Software-Entwickler & Software Testing

  • Private Nachricht senden

1

02.06.2018, 17:47

cmake-build-script erstellt executable ohne passenden Unterordner für Visual Studio

Hi Leute

Weil wir gerade ein verlängertes Wochenende haben/hatten habe ich mich dazu entschieden ein Spielprojekt zu starten.
Worum es genau gehen soll brauch ich noch nicht zu verraten weil.... Alle die die Überschrift gelesen haben kennen sich schon aus.
ich bin nicht besonders weit gekommen.

Ich habe mich dazu entschieden meine Cpp-Builds mit cmake generieren zu lassen. Vor allem aus Komfort und um plattformunabhängiger zu sein.

Das Executable dass ich in folgenden Code erstelle wird zwar auch ordnungsgemäß erstellt aber leider ohne die passenden Unterordner (in Visual Studio)

Hier kurz die Beschreibung der Ordnerstruktur:

project_home/CMakeLists.txt // top level cmake-file. verlinkt nur die anderen cmakes (bis jetzt nur Game)
project_home/Game/ // home-folder des Game Unterprojektes
project_home/Game/CMakeLists.txt // mein problemkind siehe unten
project_home/Game/Game.cpp
project_home/Game/Game.h // Game.cpp und h sollen in einen eigenen sources und includes ordner

Hier das anscheinend fehlerhafte script:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
set (includes_list
    Game.h
)
source_group(includes FILES ${includes_list})

set (sources_list
    Game.cpp
)
source_group(sources FILES ${sources_list})


set(all_stuff 
    main.cpp
    ${includes_list}
    ${sources_list}
)


add_executable(CoreGame ${all_stuff})


So das wäre alles. Ich hoffe ich finde hier jemanden der mir helfen kann.
Ich entschuldige meine cmake-unwissenheit aber ich brauche meine Unterordner xD
über jede form der hilfe würde ich mich sehr freuen

Angaben zu meinem System:
cmake-generator: Visual Studio 15 2017
Visual Studio Version: Community 2017
Betriebssystem: Windows 8.1 Wenn ich was vergessen hab, bitte einfach nachfragen.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

02.06.2018, 21:11

Wie genau "verlinkst" du die anderen CMake Scripts? In welchem Ordner wird die Binary erstellt und welcher Ordner wäre deiner Meinung nach "der Richtige"?


Gut gemeinter Rat von jemandem der leider mehr mit CMake zu tun hat als ihm lieb ist: Überleg dir nochmal, wie wichtig dir die Portabilität des Buildsystems ist. Wenn du deine geistige und emotionale Gesundheit erhalten willst, dann besser kein CMake... ;)

Beispiel für zuviel CMake: https://zfx.info/viewtopic.php?f=9&t=307&p=57609#p57609

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »dot« (02.06.2018, 21:19)


Strike

Frischling

  • »Strike« ist der Autor dieses Themas

Beiträge: 36

Wohnort: Wien 1200 und Techelsberg 9212

Beruf: Junior Software-Entwickler & Software Testing

  • Private Nachricht senden

3

03.06.2018, 09:54

Ok danke für den Ratschlag!

Ich hab mir den post in dem Jammer-thread durchgelesen und muss wirklich sagen dass ich mir von cmake etwas mehr erwartet hätte.
Ich werd mal Alternativen ausloten.


Weitere Problembeschreibung:

Die CMakeLists.txt welche ich oben mit top-level cmake-file tituliert habe verlinkt aller unteren (low-level cmakes).
In dem Fall nur Game. Inhalt der CMakeLists.txt

Quellcode

1
2
3
4
5
6
7
cmake_minimum_required(VERSION 3.8)

project(blutbad)

set_property(GLOBAL PROPERTY USE_FOLDERS ON)

add_subdirectory(Game)


Zeile 1: setzt cmake version 3.8 voraus
Zeile 3: projectname = arbeitstitel
Zeile 5: set property damit er mir bitte diese ver**** ordner macht!
Zeile 7: add_subdirectory verlinkt zum CMakeLists-file in Game


Wie gesagt werd ich mal Alternativen ausloten aber vielleicht kriegen wir das ja noch hin mit den Ordnern im Build.
Würde mich wirklich sehr freuen.

liebe Grüße :vain:

Strike

Frischling

  • »Strike« ist der Autor dieses Themas

Beiträge: 36

Wohnort: Wien 1200 und Techelsberg 9212

Beruf: Junior Software-Entwickler & Software Testing

  • Private Nachricht senden

4

03.06.2018, 10:03

Ach ja, kurzer Anhang noch.

Was den Build betrifft:

im [project_path] hängen alle möglichen dateien rum wie .gitignore, ssh-key-dateien usw... natürlich auch unsere tolle cmake,
außerdem ist dort auch ein unterordner für jedes subproject (bis jetzt nur Game) und ein Builds ordner.

In diesem Buildsordner wiederum befindet sich ein Ordner für jeden Build der parallel offen gehalten wird.
Build1, 2, 3.... usw.


Ich hoffe die Info reicht dir mal.
Möglicherweise weiß ja jemand wirklich warum ich den Unterordner dort nicht hab.
Vielleicht ist es ja auch ein ganz schnöder unmagischer Fehler und es gibt versions-spezifische unstimmigkeiten zwischen cmake und visual studio. das würd mich aber eher wundern

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

5

03.06.2018, 11:44

Ich bin bisher erstaunlich gut gefahren die Build-Umgebungen von Hand einzurichten. Klingt dämlich und würde ich in professionellem Umfeld niemals tun, aber für private Zwecke war das wesentlich zeitsparender als für 5 Target-Systeme ein CMake-File anpassen zu müssen. Das ist eine ziemlich eklige Geschichte.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Strike

Frischling

  • »Strike« ist der Autor dieses Themas

Beiträge: 36

Wohnort: Wien 1200 und Techelsberg 9212

Beruf: Junior Software-Entwickler & Software Testing

  • Private Nachricht senden

6

03.06.2018, 12:57

Ja. Das denke ich mittlerweile auch.

Danke für die Antwort Cobold.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

7

03.06.2018, 13:02

Zeile 5: set property damit er mir bitte diese ver**** ordner macht!

Hier liegt offenbar dein Missverständnis. Die USE_FOLDERS Property hat nichts mit Ordern im Dateisystem zu tun. Die legt lediglich fest, dass ein Generator mit Support für Folder (im Falle von Visual Studio z.B. Solution Folder) eben solche erzeugt. Du musst dann auch noch für das jeweilige Project die FOLDER Target Property setzen:

C-/C++-Quelltext

1
set_target_property(CoreGame PROPERTIES FOLDER Game)

Und wie gesagt, im Endeffekt ordnet das (im Falle von Visual Studio) nur das Projekt in einen Solution Folder ein und hat im Allgemeinen nix mit Ordnern im Dateisystem zu tun...

Wie gesagt werd ich mal Alternativen ausloten [...]

Genau da liegt das Problem. Es gibt nicht wirklich welche. CMake ist Mist. Aber jeder verwendet am Ende trotzdem CMake, weil alle anderen CMake verwenden. Und alle anderen verwenden CMake, weil jeder CMake verwendet. Solltest du wirklich eine gute Alternative finden, lass mich wissen, ich suche seit 10 Jahren... ;)

Strike

Frischling

  • »Strike« ist der Autor dieses Themas

Beiträge: 36

Wohnort: Wien 1200 und Techelsberg 9212

Beruf: Junior Software-Entwickler & Software Testing

  • Private Nachricht senden

8

03.06.2018, 13:15

Ok danke für die Klärung des Missverständnisses dot.

Ich hab mich jetzt entschieden das Projekt per Hand einzurichten.
Hätte ich das mal früher gemacht hätte ich zwei Entwicklungstage gewonnen.
Naja so is halt in der Software.


Wenn ich echt eine Alternative finden sollte schreib ich dich an :thumbup:

Thoran

Alter Hase

Beiträge: 520

Wohnort: Stuttgart

Beruf: Senior Software Engineer

  • Private Nachricht senden

9

03.06.2018, 16:19

Ich muss sagen, dass ich schon enttäuscht bin, wie unprofessionell und voreingenommen das Thema CMake angegangen wird. Vor allem wenn man bedenkt, dass die Problematik des OP gar nicht komplett verständlich gemacht wurde.

Das Executable dass ich in folgenden Code erstelle wird zwar auch ordnungsgemäß erstellt aber leider ohne die passenden Unterordner (in Visual Studio)

Was ist denn eigentlich Deine Erwartung? Eine Executable zu erstellen? Dann bekommst du nach Ausführen von Install ein Verzeichnis mit der Exe-Datei drin. Welche Ordner erwartest Du hier?
Oder ging es Dir um das Erzeugen der Visual Studio Solution und du hättest gerne Deine Ordnerstruktur darin abgebildet gehabt?
Kannst Du das für mich mal bitte klären, alle anderen haben das wohl schon verstanden oder benötigen die Info nicht, deswegen hab Nachsicht mit mir.
Oder ging es Dir darum, die Ordnerstruktur deines Sourecodes in deinem Buildverzeichnis widerspiegeln? Wenn das der Fall ist, würde mich ja interessieren, warum?

Wie genau "verlinkst" du die anderen CMake Scripts? In welchem Ordner wird die Binary erstellt und welcher Ordner wäre deiner Meinung nach "der Richtige"?

@dot: Du hast also nicht genau verstanden was er will, *rantest* aber vorsorglich schon mal über CMake ab? Ok! Btw. die Verlinkung des ZFX-Artikels halte ich hier für wenig zielführend, da dort bereits schon mehrmals zum Ausdruck kam, dass es einfacher ist über CMake zu schimpfen anstatt sich mit der Lösung des Problems auseinanderzusetzen.

Ich hab mir den post in dem Jammer-thread durchgelesen und muss wirklich sagen dass ich mir von cmake etwas mehr erwartet hätte.
Ich werd mal Alternativen ausloten.

@Strike: Du lässt Dich also aufgrund eines Threads in einem Hobbyentwicklerboard entmutigen Dein eigentliches Problem zu lösen?
Ich bin bisher erstaunlich gut gefahren die Build-Umgebungen von Hand einzurichten. Klingt dämlich und würde ich in professionellem Umfeld niemals tun, aber für private Zwecke war das wesentlich zeitsparender als für 5 Target-Systeme ein CMake-File anpassen zu müssen. Das ist eine ziemlich eklige Geschichte.

Was dabei mMn oft übersehen wird, ist, dass CMake einen vergleichsweise hohen initialen Aufwand hat, aber dann ziemlich stabil bleibt. Wenn ich alles platformspezifsich von Hand mache, habe ich potenziell n Fehlerquellen bei n Platformen und für jede neue Platform kommt neuer Initialaufwand hinzu.
Zitat von »Strike«
Wie gesagt werd ich mal Alternativen ausloten [...]
Genau da liegt das Problem. Es gibt nicht wirklich welche.

@dot: Und deswegen halte ich es für unvernünftig, eine Antwort damit zu beginnen, was für ein ("überspitzt gesagt") Bullshit CMake ist, andere Entwickler in native Build/Makefiles zu treiben und am Ende aber zu sagen, "Naja, aber man muss CMake halt doch benutzen...". 8|
Mein Entwicklertagebuch
Aktuelles Projekt: Universum Espionage
Eingestellt:Spieleengine SilverCore
Organisator "Spieleentwickler Stammtisch Stuttgart"

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

10

03.06.2018, 16:45

Was dabei mMn oft übersehen wird, ist, dass CMake einen vergleichsweise hohen initialen Aufwand hat, aber dann ziemlich stabil bleibt. Wenn ich alles platformspezifsich von Hand mache, habe ich potenziell n Fehlerquellen bei n Platformen und für jede neue Platform kommt neuer Initialaufwand hinzu.
Und dennoch ist der Aufwand es von Hand zu machen meist wesentlich weniger als sich mit CMake abzuquälen und jedes Setup auf einem neuen System macht man auch nur einmalig. Speziell wenn man seine IDE oder sein Zielsystem im Griff hat, ist so ein Setup sehr schnell gemacht. Bei den paar Dateien, die er da hat, sowieso. Visual Studio macht ja fast alles von allein. XCode auch. IntelliJ ebenso. Code::Blocks hat vielleicht noch ein paar Stellschrauben. Android-Builds sehen fast immer identisch aus, also auch kaum Aufwand. Wenn ich also nur für mich arbeite, schenke ich mir CMake. Wenn davon potentiell 100+ andere Entwickler abhängen, ist das natürlich wieder was ganz anderes.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige