2014-01-30 12 views
6

Wie wird ein vorkompilierter Header für die Ausgabe von CMake (2.8.12.1) AUTOMOC angegeben?Qt5, CMake, AUTOMOC und vorkompilierte Header

Bisher in der CMakeLists.txt habe ich versucht, diese zwei getrennt:

set(AUTOMOC_MOC_OPTIONS "-bstdafx.h") 
set(AUTOMOC_MOC_OPTIONS "-fstdafx.h") 

Die erzeugte AUTOMOC Ausgang beim Bau des Projekts (project_automoc.cpp) nur die moc_xxx.cpp Dateien enthält:

/* This file is autogenerated, do not edit*/ 
/// <- stdafx.h should be here ?!?! 
#include "moc_widget_fps.cpp" 
#include "moc_widget_sysevents.cpp" 

Antwort

0

AUTOMOC_MOC_OPTIONS wirkt sich nicht auf die Datei project_automoc.cpp aus. Es enthält Optionen, die an moc übergeben werden, um "moc_widget_fps.cpp" und "moc_widget_sysevents.cpp" zu erstellen. Diese sollten Ihre PCH enthalten.

+1

Was ich in meinem Projekt zu sehen, wenn ich auf dem AUTOMOC ON drehen ist, für jeden file.h dass hat eine Klasse mit Q_OBJECT in, ich bekomme eine entsprechende moc_file.cpp im Build-Verzeichnis. Diese Dateien werden meinem (Visual Studio) Projekt nicht hinzugefügt, stattdessen erhalte ich eine einzige Datei project_automoc.cpp, die alle darin enthaltenen cpp-Dateien enthält. Da mein Projekt vorkompilierte Header verwendet, sollte diese Datei stdafx.h enthalten. Wenn ich /Fistdafx.h dieser Datei manuell in VS hinzufüge, kompiliert es fein – Pencheff

+0

Überprüfen Sie, ob die MOC-Befehlszeile die entsprechenden Optionen -b und -f beim Erstellen von moc_file.cpp enthält. – steveire

+0

@steveire Wie beeinflusst man die Befehlszeile von cmake? –

2

Die richtige einzustellende Variable heißt CMAKE_AUTOMOC_MOC_OPTIONS. Es wird verwendet, um die AUTOMOC_MOC_OPTIONS Eigenschaft eines Ziels zu initialisieren, d.h .:

set (CMAKE_AUTOMOC_MOC_OPTIONS "-bstdafx.h" "-fstdafx.h") 

Beachten Sie auch, dass dies nur die Qt MOC Compiler den gegebenen enthält zu jedem generierten moc_xxx.cpp Datei hinzufügen machen. Der Gesamtwert project_automoc.cpp ist nicht betroffen.

+0

Aber ich habe Auswirkungen auf "project_automoc.cpp" :(. Weil Projekt zählen nicht kompilieren diese Datei ohne vorkompilierte Header. –

+0

Ist es möglich? –

+1

Blick auf den CMake-Quellcode scheint es, dass die Generierung der 'project_automoc.cpp' ist fest codiert und ist nicht konfigurierbar – sakra

2

Nach einigem Graben ich beschlossen, nur die AUTOMOC drehen für Projekte Funktion aus, die vorkompilierte Header verwenden:

set_target_properties (ProjectName PROPERTIES AUTOMOC FALSE) 

# Set the headers that need moc'ing 
file (GLOB MOC_FILES widget_filetransfer.h widget_main_menu.h widget_main_toolbar.h) 
QT5_WRAP_CPP (MOC_SOURCES ${MOC_FILES}) 

... 
# Force PCH for the generated MOC files 
foreach (src_file ${MOC_SOURCES}) 
    set_source_files_properties (${src_file} 
    PROPERTIES COMPILE_FLAGS "/Yustdafx.h /FIstdafx.h" 
) 
endforeach() 
+0

Wenn Sie das automatische Ausschalten deaktivieren, beachten Sie, dass Sie unter Windows die Liste aller Header-Dateien mit dem Makro Q_OBJECT einfach durch Ausführen von 'findstr/m/s" Q_OBJECT "" * .h "' im Quellordner über die Befehlszeile abrufen können. Es gibt sicher einen ähnlichen Befehl für Linux/MacOS –

+0

Gibt es sonst noch eine andere Lösung?Idealerweise würde CMake eine Option zum Hinzufügen einer Include-Datei zur generierten _Automoc-Datei bieten, richtig? – codeling

Verwandte Themen