Hallo,
ich habe in einem Projekt die Boost Bibliothek mit MPI Zugriff. Nun soll in das Programm noch eine GUI unter Qt implementiert werden. Gibt es eine Möglichkeit die Qt GUI Klassen mit g++ oder mpic++ direkt zu kompilieren, d.h. ohne qmake zu verwenden?
Ich müsste doch nur qmake verwenden, um die moc_ Dateien zu erzeugen und dann diese mit mpic++ entsprechend zu kompilieren. Das ganze möchte ich über ein einfaches Makefile machen. Hätte jemand da ein paar Tips für mich, wie ich das realisieren könnte?
Danke
Phil
kompilieren mit mpic++
Ich würde mal behaupten, dass das nicht geht.
Denn auch ein simples QWidget besitzt Signale und Slots. Also mit "signals:" und zB "public slots:" definiert. Auch Makros wie das Q_OBJECT werden sich in den Sourcen finden.
Das sind alles Dinge, die std.gemäß erst einmal nicht erkannt werden können beim "direkten" kompilieren. Außer du bringst es dem Compiler bei, aber das ist ja das, was einem Qt abnimmt.
Aber was spricht denn dagegen, ein Qt Project zu verwenden? Deine boost libs kannst du ja trotzdem problemlos weiterverwenden.
Oder musst die Geschichte irgendwie kapseln, voneinander trennen, aber dafür kennt man das eigentliche Projekt nicht, ob es dafür Sinn machen könnte.
Denn auch ein simples QWidget besitzt Signale und Slots. Also mit "signals:" und zB "public slots:" definiert. Auch Makros wie das Q_OBJECT werden sich in den Sourcen finden.
Das sind alles Dinge, die std.gemäß erst einmal nicht erkannt werden können beim "direkten" kompilieren. Außer du bringst es dem Compiler bei, aber das ist ja das, was einem Qt abnimmt.
Aber was spricht denn dagegen, ein Qt Project zu verwenden? Deine boost libs kannst du ja trotzdem problemlos weiterverwenden.
Oder musst die Geschichte irgendwie kapseln, voneinander trennen, aber dafür kennt man das eigentliche Projekt nicht, ob es dafür Sinn machen könnte.
QMake macht aber auch nix anderes als Makefiles zu erstellen - und mit denen geht das mit Q_OBJECT doch auch problemlos?
Man muss halt eigene targets für uic und moc definieren, in denen dann moc und uic auf die Dateien losgelassen wird, fertig.
Ich würde es aber trotzdem nicht machen, ist zu umständlich und fehleranfällig
Verwende Makefile-Generatoren, mit denen du auf verschiedenen Plattformen/Compilern/... immer passende Makefiles - oder eben projectfiles für MS VS, codeblocks, ... - bekommst. Und das muss nicht qmake sein. Ich verwende das nur wenn ich ganz schnell was testen will. Für Projekte verwende ich immer cmake.
Man muss halt eigene targets für uic und moc definieren, in denen dann moc und uic auf die Dateien losgelassen wird, fertig.
Ich würde es aber trotzdem nicht machen, ist zu umständlich und fehleranfällig
Verwende Makefile-Generatoren, mit denen du auf verschiedenen Plattformen/Compilern/... immer passende Makefiles - oder eben projectfiles für MS VS, codeblocks, ... - bekommst. Und das muss nicht qmake sein. Ich verwende das nur wenn ich ganz schnell was testen will. Für Projekte verwende ich immer cmake.
Danke für die Infos.
Das Problem ist folgendes, im Moment kompiliere ich mit mpic++, d.h. einmal erzeugt es die *.o Dateien und linkt dann passend die Boost-MPI Bibliotheken hinzu.
Ich kann die Sources nicht ohne mpic++ kompilieren oder linken, das führt dann zu Fehlermeldungen, d.h. ich muss aus den Klassen, die Qt Elemente beinhalten die entsprechenden Codes so erzeugen, dass ich ihn mit mpic++ verarbeiten kann.
Wenn ich ein reines Qt Project aufbaue ist das alles kein Problem, es geht halt wirklich um diese Zwischenschritt, dass mit eben die die entsprechenden Zwischendateien erzeugt werden. Hat das jemand schon einmal jemand per Hand gemacht? Das Kommando "moc" gibt es ja, nur wie verwendet man das dann genau?
Das Problem ist folgendes, im Moment kompiliere ich mit mpic++, d.h. einmal erzeugt es die *.o Dateien und linkt dann passend die Boost-MPI Bibliotheken hinzu.
Ich kann die Sources nicht ohne mpic++ kompilieren oder linken, das führt dann zu Fehlermeldungen, d.h. ich muss aus den Klassen, die Qt Elemente beinhalten die entsprechenden Codes so erzeugen, dass ich ihn mit mpic++ verarbeiten kann.
Wenn ich ein reines Qt Project aufbaue ist das alles kein Problem, es geht halt wirklich um diese Zwischenschritt, dass mit eben die die entsprechenden Zwischendateien erzeugt werden. Hat das jemand schon einmal jemand per Hand gemacht? Das Kommando "moc" gibt es ja, nur wie verwendet man das dann genau?
Was ich jetzt gelesen hab ist mpic++ nur ein Wrapper um deinen normalen Compiler mit Extra-Magic für MPI. Verwende QMake oder CMake oder $(XYZ-Makefile-Generator), und setze den Compiler auf mpi[cc|cxx].
Das geht über QMAKE_CC / QMAKE_CXX für qmake, bzw. CMAKE_C_COMPILER / CMAKE_CXX_COMPILER bein cmake. Fertig.
Das geht über QMAKE_CC / QMAKE_CXX für qmake, bzw. CMAKE_C_COMPILER / CMAKE_CXX_COMPILER bein cmake. Fertig.