[Gelöst] Cmake führt weder moc noch uic aus
-
- Beiträge: 15
- Registriert: 3. Februar 2008 15:40
[Gelöst] Cmake führt weder moc noch uic aus
Hallo!
Bei einem meiner Projekte, welches ich vor kurzem umstrukturiert habe, führt CMake nun weder uic noch moc aus, was klarerweise zu einem Abbruch des build vorganges führt da CMake dann die entsprechenden includes nicht findet (moc.cxx und ui_.h)
Irgendjemand irgendwelche ideen?... Ich versuche bereits seit längerer Zeit dieses Problem zu lösen, aber bisher ohne Erfolg...
Ich vermute es liegt an meiner ziemlich verschachtelten Ordnerstruktur, aber das muss doch möglich sein oO
Ich würde mich sehr freuen über antworten
Mfg,
Bernhard
Bei einem meiner Projekte, welches ich vor kurzem umstrukturiert habe, führt CMake nun weder uic noch moc aus, was klarerweise zu einem Abbruch des build vorganges führt da CMake dann die entsprechenden includes nicht findet (moc.cxx und ui_.h)
Irgendjemand irgendwelche ideen?... Ich versuche bereits seit längerer Zeit dieses Problem zu lösen, aber bisher ohne Erfolg...
Ich vermute es liegt an meiner ziemlich verschachtelten Ordnerstruktur, aber das muss doch möglich sein oO
Ich würde mich sehr freuen über antworten
Mfg,
Bernhard
- Dateianhänge
-
- moc_error.zip
- kleinstmögliches Projekt mit exakt dem selben Aufbau den ich benötige
Im build ordner "cmake .." ausführen um den Fehler zu reproduzieren - (3.34 KiB) 112-mal heruntergeladen
Zuletzt geändert von LordBernhard am 11. September 2010 16:13, insgesamt 2-mal geändert.
-
- Beiträge: 15
- Registriert: 3. Februar 2008 15:40
Danke für die Antwort, aber ich verwende diese beiden Makros...franzf hat geschrieben:Ich nehme an, dir fehlt einfach QT4_WRAP_CPP() (->moc) resp. QT4_WRAP_UI() (->uic).
In der CMake-Doku findest du mehr dazu.
Sollte dich das nicht weiterbringen (was ich nicht glaube), solltest du dein CMakeLists.txt posten.
Ich bin bereits soweit gegangen diese zu adaptieren, um mir mittels "message" die Pfade (in/out) ausgeben zu lassen - welche korrekt sind imho
Im zip file befindet sich die Ordnerstruktur samt entsprechenden CMakeLists... ich wüsste derzeit nämlich nicht aus welcher ebene ich die CMakeLists.txt posten sollte.
die makros sind in der CMakeLists.txt im Ordner src/libdinjam/data
Das schaut mir recht unorthodox aus. Das Problem wird sein, dass du über globale Variablen (die ja auch in C++ böse sind...) deine MOCS setzt. Verwenden tust du es in der Verzeichnishierarchie eins tiefer - und da liegt der Hund begraben - die Pfade stimmen nicht mehr!
Bei mir läuft übrigens nichtmal cmake durch:
Wenn du in libdinjam/data nichts machen willst, dann erledig doch die Arbeit in "data/..". Lass libdinjam/data/CMakeLists.txt weg, und mach dein libdinjam/CMakeLists.txt so:
Dann funktioniert jedenfalls der Teil deines Sourcetrees, den du gepostet hast. (Kompilieren tut es immer noch nicht, liegt aber an den Sourcen - gemoced wird erfolgreich )
MERKE:
Globale Variablen sind böse, vor allem dann, wenn relative Angaben drin stehen
Bei mir läuft übrigens nichtmal cmake durch:
Code: Alles auswählen
CMake Error in src/libdinjam/CMakeLists.txt:
Cannot find source file "moc_documenttype.cxx". Tried extensions .c .C
.c++ .cc .cpp .cxx .m .M .mm .h .hh .h++ .hm .hpp .hxx .in .txx
Code: Alles auswählen
include_directories(${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_BINARY_DIR}
)
SET(LIBDINJAM_DATA_SRCS
data/global.cpp
)
QT4_WRAP_CPP(LIBDINJAM_DATA_MOCS
data/documenttype.h
)
ADD_LIBRARY(libdinjam ${LIBDINJAM_DATA_SRCS} ${LIBDINJAM_DATA_MOCS})
MERKE:
Globale Variablen sind böse, vor allem dann, wenn relative Angaben drin stehen
-
- Beiträge: 15
- Registriert: 3. Februar 2008 15:40
Der Fehler ist mir bekannt, und dadurch ist mir überhaupt erst aufgefallen, dass moc/uic nicht durchlaufen...franzf hat geschrieben:Das schaut mir recht unorthodox aus. Das Problem wird sein, dass du über globale Variablen (die ja auch in C++ böse sind...) deine MOCS setzt. Verwenden tust du es in der Verzeichnishierarchie eins tiefer - und da liegt der Hund begraben - die Pfade stimmen nicht mehr!
Bei mir läuft übrigens nichtmal cmake durch:Code: Alles auswählen
CMake Error in src/libdinjam/CMakeLists.txt: Cannot find source file "moc_documenttype.cxx". Tried extensions .c .C .c++ .cc .cpp .cxx .m .M .mm .h .hh .h++ .hm .hpp .hxx .in .txx
das problem ist jedoch, dass ich noch viele derartige ordner habe, und sonst die cmakelists.txt in der "root" ebene extrem unübersichtlich wird, weshalb ich auch die Lösung mit den globalen variablen versucht habe (wovon ich mir bewusst bin, dass es eine unsaubere/hackish lösung ist)franzf hat geschrieben:Wenn du in libdinjam/data nichts machen willst, dann erledig doch die Arbeit in "data/.."
mhm... danke soweit, dass es so funktionieren würde, aber gibt es keine lösung, dass ich in jedem ordner die jeweiligen sourcefiles hinzufüge? dafür habe ich eben versucht die globalen variablen zu verwenden....
ich hätt einfach gerne eine klare trennung der ordner....
Es gibt auch in cmake ein "include".
http://cmake.org/cmake/help/cmake-2-8-d ... nd:include
Schreib dir eine CMake List (beliebiger Name) und include den:
data/include.txt
libdinjam/CMakeLists.txt
Aber dein Argument warum nicht direkt im TopLevel-Verzeichnis versteh ich nicht. Was du mit den globalen Variablen an Tänzen hast aufführen müssen, hat keinen Platz gespart.
Und bei ordentlicher Gliederung kann man auch lange CMakeLists.txt übersichtlich halten.
Mit include darfst du halt jetzt statt einem größeren zig kleine Lists verwalten. Mir wäre das zu unübersichtlich
http://cmake.org/cmake/help/cmake-2-8-d ... nd:include
Schreib dir eine CMake List (beliebiger Name) und include den:
data/include.txt
Code: Alles auswählen
QT4_WRAP_CPP(LIBDINJAM_DATA_MOCS
data/documenttype.h
)
SET(SOURCES ${SOURCES} ${LIBDINJAM_DATA_MOCS} global.cpp)
Code: Alles auswählen
include_directories(${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_BINARY_DIR}
)
SET(SOURCES)
include(data/include.txt)
ADD_LIBRARY(libdinjam ${SOURCES})
Und bei ordentlicher Gliederung kann man auch lange CMakeLists.txt übersichtlich halten.
Mit include darfst du halt jetzt statt einem größeren zig kleine Lists verwalten. Mir wäre das zu unübersichtlich
-
- Beiträge: 15
- Registriert: 3. Februar 2008 15:40
DANKE! oh mann ich kann nicht glauben, dass ich nicht danach gesucht hab... -.- so ergibt das ganze gleich mal vieeeel mehr sinn....franzf hat geschrieben:Es gibt auch in cmake ein "include".
buildet schon das ganze...
platz gespart nicht ja... aber dafür waren die ordner recht schön voneinander getrenntfranzf hat geschrieben:Aber dein Argument warum nicht direkt im TopLevel-Verzeichnis versteh ich nicht. Was du mit den globalen Variablen an Tänzen hast aufführen müssen, hat keinen Platz gespart.
ist mir bewusst, aber ich hab das lieber aufgeteilt auf mehrerefranzf hat geschrieben:Und bei ordentlicher Gliederung kann man auch lange CMakeLists.txt übersichtlich halten.
jedem das seine mir sind mehrere listen lieber ^^franzf hat geschrieben:Mit include darfst du halt jetzt statt einem größeren zig kleine Lists verwalten. Mir wäre das zu unübersichtlich
danke nochmal