2014-01-30 1 views
6

미리 컴파일 된 헤더를 CMake (2.8.12.1)의 출력에 지정하는 방법 AUTOMOC?Qt5, CMake, AUTOMOC 및 미리 컴파일 된 헤더

지금까지 CMakeLists.txt에 나는이 두 별도로 시도했다 :

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

에만 moc_xxx.cpp 파일이 들어있는 프로젝트 (project_automoc.cpp)를 구축 생성 된 AUTOMOC 출력 :

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

답변

0

AUTOMOC_MOC_OPTIONS는 project_automoc.cpp 파일에 영향을주지 않습니다. 여기에는 "moc_widget_fps.cpp"및 "moc_widget_sysevents.cpp"를 만들기 위해 moc에 전달 된 옵션이 들어 있습니다. 그것들은 당신의 pch 포함해야합니다.

+1

, 즉 Q_OBJECT가있는 클래스가있는 경우 빌드 디렉토리에 해당 moc_file.cpp가 있습니다. 이 파일들은 내 (비주얼 스튜디오) 프로젝트에 추가되지 않고, 그 안에 모든 moc'ed cpp 파일을 포함하는 하나의 project_automoc.cpp 파일이 있습니다. 내 프로젝트는 미리 컴파일 된 헤더를 사용하므로이 파일에는 stdafx.h가 포함되어야합니다. VS에있는 해당 파일에 /FIstdafx.h를 직접 추가하면 컴파일됩니다. – Pencheff

+0

moc_file.cpp를 만들 때 moc 명령 줄에 적절한 -b 및 -f 옵션이 포함되어 있는지 확인하십시오. – steveire

+0

@steveire cmake에서 moc 명령 줄에 어떻게 영향을 줍니까? –

2

설정할 올바른 변수는 CMAKE_AUTOMOC_MOC_OPTIONS입니다.

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

는 또한이 단지 Qt는 MOC 컴파일러가 생성 된 각 moc_xxx.cpp 파일에 포함 부여를 추가 할 것입니다주의 :, 즉를 대상의 AUTOMOC_MOC_OPTIONS 속성을 초기화하는 데 사용됩니다. 전체적으로 project_automoc.cpp은 영향을받지 않습니다. 난 그냥 AUTOMOC을 설정하기로 결정 뒷조사는 미리 컴파일 된 헤더 사용하는 프로젝트 오프 기능이 후

+0

하지만'project_automoc.cpp'에 영향을 주어야합니다 : (.) ​​프로젝트 카운트가 미리 컴파일 된 헤더없이이 파일을 컴파일하지 않기 때문에 –

+0

가능합니까? –

+1

CMake 소스 코드를 보면 project_automoc.cpp가 생성 된 것으로 보입니다. 하드 코딩되어 있으며 구성 할 수 없습니다. – sakra

2

: 모든 file.h에 대한

은 내가이 AUTOMOC ON 전원을 켤 때 나는 내 프로젝트에서 볼 수있다
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

자동 실행 기능을 해제 할 때 Windows에서 명령 줄의 원본 폴더에서'findstr/m/s "Q_OBJECT" "* .h"'를 실행하여 Q_OBJECT 매크로로 모든 헤더 파일의 목록을 쉽게 얻을 수 있습니다. 분명히 Linux/MacOS에 대한 유사한 명령이 있습니다 –

+0

그 동안 다른 해결책이 있습니까?이상적으로 cmake는 생성 된 _automoc 파일에 include 파일을 추가하는 옵션을 제공 할 것입니다. – codeling