Einstieg in wxWidgets
-
Ich habe mal versucht, den technischen Einstieg in wxWidgets möglichst praktisch darzustellen:
https://www.henkessoft.de/wxWidgets/wxWidgets_001.html
-
Hi,
zwei Fragen dazu:
Warum manuell einstellen und nicht über diewxwidgets.props
?
Und, warum die Fokussierung auf Release? Gerade Anfänger könnten die Debug Variante brauchen, oder? Auch um hinterher Debug Asserts zu bekommen, wenn Sizer Flags blödsinnig gesetzt werden und ähnliches?P.S.: Bin gerade über deine Schach Sachen gestolpert. Da ich aktuell so ein bisschen auf Lichess selbst spiele (massives unteres Amateurschach ) und ein paar Spielern auf Youtube Folge, eine tolle Prokrastinationsmöglichkeit gerade, danke dafür
-
Nutzt man auf Windows / VS mittlerweile nicht auch CMake? Ich würde mir jedenfalls wünschen, dass Tutorials mehr auf Cross Platform Lösungen eingehen. Selbst wenn man nur auf Windows entwickeln sollte, muss man ja nicht explizit das Entwickeln auf anderen Platformen erschweren bzw. das manuelle Einstellen von Include paths etc. ist doch auch so eher nervig.
-
@Leon0402 Doch, macht man auch. Aber für jemanden der als Anfänger schnell eine GUI haben will, ist CMake schon eine Hausnummer, finde ich.
Für jeden, der das etwas professioneller macht, hat wxWidgets auch selbst gut erklärt, wie das mit CMake funktioniert: https://docs.wxwidgets.org/trunk/overview_cmake.html
-
@Schlangenmensch sagte in Einstieg in wxWidgets:
Doch, macht man auch. Aber für jemanden der als Anfänger schnell eine GUI haben will, ist CMake schon eine Hausnummer, finde ich.
Ja und nein. In der Praxis ist CMake eine Hausnummer, was vor allem historische Gründe hat. In der Theorie kann CMake super einfach funktionieren. Aber dazu müssen die Libraries etc. das halt auch ordentlich unterstützen und dokumentieren. Zudem muss es auch Tutorials geben, die sowas wie hier eben mit CMake im Jahre 2023 zeigen.
Aber z.B. wxwidgets sieht auf den ersten Blick einfach zu nutzen aus. Es hat einen Config Modus (seit CMake 3.24 scheinbar) und exportiert (hoffentlich) dann auch ordentliche targets.
Wobei der sample code das eher nicht zeigt bzw. die docs scheinen hier dann nicht mehr aktuell zu sein:
target_link_libraries(myapp ${wxWidgets_LIBRARIES})
Bei add_subdirectory geht es doch auch:
target_link_libraries(myapp wx::net wx::core wx::base)
Und das ganze vlt. noch mit FetchContent / CPM und dann wäre auch diese Möglichkeit sehr einfach zu verwenden.
Zumindest wüsste ich nicht, was die große Hausnummer ist an:
# ###################################################################################################################### # Preamble # ###################################################################################################################### cmake_minimum_required(VERSION 3.25) project(my_test_gui_project LANGUAGES CXX) # ###################################################################################################################### # Project Wide Setup # ###################################################################################################################### set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) # ###################################################################################################################### # Dependencies # ###################################################################################################################### find_package(wxWidgets REQUIRED COMPONENTS net core base) # ###################################################################################################################### # Main targets # ###################################################################################################################### add_executable(my_test_gui_target) target_sources(my_test_gui_target PRIVATE src/Main.cpp) target_link_libraries(my_test_gui_target PRIVATE wx::net wx::core wx::base)
Das es in der Praxis leider häufig nicht so aussieht ist wie oben gesagt weniger ein Problem von CMake selbst, sondern eher von der historischen Entwicklung (und auch dem Fakt, dass selbst sehr erfahrene und professionelle C++ Entwickler sich weigern, sich auch nur 5min mit Cmake zu beschäftigen).
Edit: Eine Sache, die wxwidgets auch verbessern könnte ist deren Docs aufsplitten. Was hat wxwidgets mit cmake builden zu tun mit wxwidgets mit cmake nutzen. Ja, mit FetchContent, Git Submodules etc. gibt es da ggf. durchaus eine Verbindung, aber im wesentlichen sind das zwei völlig verschiedene Themen.
-
@Leon0402 Ja sicher. Aber auch wenn es ordentlich unterstützt wird muss man zumindest sich noch CMake installieren, und sein eigenes Projekt damit aufsetzen. Ist und bleibt eine Abhängigkeit und ein Tool mit dem man sich auseinandersetzen muss. Das kann sehr sinnvoll sein, ist aber zumindest eine Hürde.
Es kommt halt drauf an, wen man mit so einem Tutorial ansprechen möchte. Für den typischen Anfänger, der schnell Erfolg sehen will ist zwar C++ eh nicht die richtige Wahl aber dann auch noch ein Buildsystem einführen, ist vlt ein bisschen viel des Guten .
-
@Schlangenmensch Vermutlich würde ich im aller ersten Tutorial auch nicht direkt die gui lib einführen. Sondern normalerweise gibt es ja erstmal ein Hello World etc.
Wenn ich ein Buch schreiben würde, würde ich es vermutlich so machen:
- Einstieg in einem Online Compiler o.ä. wo man gar nichts einrichten muss / selber kompilieren muss für die anfängliche Motivation .... weil wie du sagst: Erstmal mit CMake rumschlagen bevor man die erste zeile Code schreibt ist nicht grade motivieren. Das selbe gilt aber auch für Make, Compiler und IDEs imo.
- Dann von Hand kompilieren
- Dann mit Make
- Dann mit CMake
wobei ich das von hand oder mit make kurz halten würde. Nur als Motivation um zu verstehen, was die Tools u.a. im Hintergrund machen und wieso man die Tools braucht.
Wenn dann komplexere Themen kommen wie Libraries einbinden, würde ich wieder den etwas manuelleren Weg zeigen. Sprich die Library selber beim linken angeben, den Include path manuell setzen etc. (in CMake aber direkt) und zeigen wie das ganze übersetzt wird in den rohen Compiler Aufruf.
Alleine zum Debuggen etc. ist es einfach essentiell, dass man versteht wie das geht. Aber dann eben auch schnell zeigen wie man es in Projekten richtig macht mit Targets etc.Naja wer weiß, vlt. schreibe ich ja irgendwann mal ein Buch oder zumindest ein Blog Ich denke den richtigen Kompromiss den man finden muss ist folgender:
- Komplexität niedrig halten, Motivation geben etc. grade am Anfang, keine totale Überforderung, keine Stunden von Arbeit um kleine Fortschritte zu erzielen
- Das Fundament richtig und korrekt vermitteln. Dazu zählt grade bei C++ durchaus wie der Compiler im Hintergrund wirklich auch arbeitet. Wer da wirklich keine Ahnung von hat, kommt in C++ ganz schnell an Grenzen imo.
- Best Practices vermitteln, die auch large scale funktionieren
Erfahrungsgemäß schaffen Bücher etc. die ich kenne allerhöchstens zwei dieser drei Punkte abzudecken, i.d.R. aber höchstens einen