Seite 1 von 1

VS 2008 moc datei immer wieder erstellt!

Verfasst: 2. Juni 2010 10:19
von Bugi
Hallo,

ich habe ein Qt Projekt, was ich in VS 2008 entwickle. Soweit funktioniert alles prima. Aber mit der zuwachsenden Projektgröße dauert der Kompiliervorgang länger. Mir ist es aufgefallen, dass beim Erstellen des Projektes jedes mal die mocs neu erstellt werden, obwohl ich in header Dateien überhaupt nix geändert hatte.

Kann man das irgendwo einstellen, dass VS die mocs nur dann erstellt, wenn es in header Datei was geändert wird?

Vielen Dank im Voraus!

Verfasst: 2. Juni 2010 10:44
von Troll.Soft
VC kann alles neu kompilieren oder nur geändertes. Je nachdem was Du von ihm verlangst. Im Pro-File von Qt kann man das nicht steuern. Aber Du kannst im Pro-File precompiled-header nutzen einstellen. Das drückt die Compiledauer erheblich.
tschüß
Troll.Soft

Verfasst: 2. Juni 2010 15:04
von brax
Das ist kein VS Problem, normalerweise werden die MOCs nur neu erstellt, wenn sich der Header geändert hat.
Welche QT Version benutzt Du? Ich glaube bei 4.5.2 hatte ich das gleiche Problem. Meine Lösung sah so aus:
In %QTDIR%/makespecs/features/ die Datei moc.prf öffnen. Dort die Zeilen
!isEmpty(INCLUDETEMP):moc_header.depends += $$INCLUDETEMP
und
!isEmpty(INCLUDETEMP):moc_source.depends += $$INCLUDETEMP
auskommentieren (mit '#'). Bei mir waren es die Zeilen 68 und 80.
Danach ein qmake und dann sollte wieder alles gut funktionieren.

War (bei mir) ab 4.5.3 nicht mehr notwendig. Solltest Dies wirklich Dein Problem sein, empfehle ich dringend eine andere QT Version zu benutzen (auch nach der obigen Änderung hatte ich hier und da noch ein paar Probleme mit 4.5.2 und dem Bauprozess).
Viel Erfolg!

Verfasst: 2. Juni 2010 18:14
von Bugi
Hallo,

wie sieht es denn aus wenn man qmake nicht benutzt? Aktuell verwende ich die Qt 4.6.2 mit VS2008. Da ich neben Qt auch andere Libs verwende, habe ich bisher qmake noch nie eingebunden und auch nicht benötigt.

Leider weiß ich nicht wie man dem benutzerdefiniertem Buildbefehl klarmachen kann, dass er den moc nur ausführt, wenn sich am Header was geändert hat ?

Danke für die Antworten!

Verfasst: 3. Juni 2010 08:41
von brax
Die Benutzung anderer Libs schließt nicht aus, dass Du Deine VS Projektdateien von qmake erzeugen lässt, aber das nur am Rande.

Ich bin mir nicht sicher, wie beim VS die CustomBuildSteps am Besten konfiguriert sind. Ich paste mal einen Teil einer von qmake generierten .vcproj Datei von mir, vielleicht hilft Dir das ja....

Code: Alles auswählen

<File
					RelativePath="common\myHeader.h"
					>
					<FileConfiguration
						Name="Debug|Win32"
						>
						<Tool
							Name="VCCustomBuildTool"
							Description="MOC common\myHeader.h"
							CommandLine="C:\opt\x86\qt\4.6.2\bin\moc.exe  -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DFFRAMEWORK -DCYGWINNT-6.0-WOW64 -DCYGWIN_NT-6.0-WOW64_i386 -DDEBUG -D_WIN32 -DGITTIMESTAMP=\"Mon_May_31_10:28:02_2010_+0200\" -DNOMINMAX -DWORKSTATIONARCH=\"CYGWIN_NT-6.0-WOW64.i386\"  -DFTGL_LIBRARY_STATIC -DHAVE_QCA -DHAVE_LIBQWEBDAV -D_USE_MATH_DEFINES -DHAVE_FOC -DHAVE_TNT -DTNT_SUBSCRIPT_TYPE=unsigned -DTNT_BOUNDS_CHECK -DQT_DLL -DQT_SQL_LIB -DQT_XML_LIB -DQT_OPENGL_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I"c:\opt\x86\qt\4.6.2\include\QtCore" -I"c:\opt\x86\qt\4.6.2\include\QtNetwork" -I"c:\opt\x86\qt\4.6.2\include\QtGui" -I"c:\opt\x86\qt\4.6.2\include\QtOpenGL" -I"c:\opt\x86\qt\4.6.2\include\QtXml" -I"c:\opt\x86\qt\4.6.2\include\QtSql" -I"c:\opt\x86\qt\4.6.2\include"  -I"-I"c:\opt\x86\qt\4.6.2\include\ActiveQt" -I"obj\moc.win32d" -Ic:\opt\x86\qt\4.6.2\mkspecs\win32-msvc2008 -D_MSC_VER=1500 -DWIN32 common\myHeader.h -o obj\moc.win32d\moc_myHeader.cpp&#x0D;&#x0A;"
							AdditionalDependencies="C:\opt\x86\qt\4.6.2\bin\moc.exe;common\myHeader.h"
							Outputs="obj\moc.win32d\moc_myHeader.cpp"
						/>
					</FileConfiguration>
				</File>
Ist zugegebenermaßen etwas unübersichtlich....
Viel Erfolg

Verfasst: 3. Juni 2010 14:12
von Troll.Soft
brax hat geschrieben:Die Benutzung anderer Libs schließt nicht aus, dass Du Deine VS Projektdateien von qmake erzeugen lässt, aber das nur am Rande.
Finde ich durchaus wichtig und vor allem sehr praktisch. Die Files für qmake sind ausgesprochen übersichtlich. Hier ist ein Beispiel:

Code: Alles auswählen

QT	+= core
QT	+= gui
QT	+= xml
QT	+= svg
QT	+= sql
QT	+= network
QT	+= webkit

CONFIG	+= qt
CONFIG	+= warn_on
CONFIG	+= exceptions
CONFIG	+= rtti
CONFIG	+= debug 

PRECOMPILED_HEADER  = my_precompiled_header.h	

TEMPLATE    = vcapp

MOC_DIR	    = moc
DESTDIR     = debug.WINDOWS
OBJECTS_DIR = debug.WINDOWS

LIBS       += ../../fremdeLib1.lib
LIBS       += ../../../../fremdeLib2.lib


SOURCES     = source/main.cpp
SOURCES    += source/source_1.cpp
SOURCES    += source/source_2.cpp
	...
SOURCES    += source/source_n.cpp


HEADERS     = include/header_1.h
HEADERS    += include/header_2.h
	...
HEADERS    += include/header_n.h


TARGET      = main
sieht irgendwie übersichtlich und selbsterklärend aus.
Die moc werden nur einmal angelegt und compiliert, die header auch nur einmal compiliert. Nur die Source an der Du aktuell sitzt wird compiliert.
tschüß
Troll.Soft