QT5,CMAKE,汽车和预编译标头



如何将预编译的标头指定为CMAKE(2.8.12.1)Automoc?

的输出

到目前为止,在cmakelists.txt中,我分别尝试了这两个:

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

构建项目时生成的汽车输出(project_automoc.cpp)仅包含moc_xxx.cpp文件:

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

挖掘后,我决定仅关闭使用预编译标头的项目的汽车功能:

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()

要设置的正确变量称为cmake_automoc_moc_options。它用于初始化目标的AUTOMOC_MOC_OPTIONS属性,即:

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

还要注意,这只会使QT MOC编译器添加给定包含在每个生成的moc_xxx.cpp文件中。总体project_automoc.cpp不会受到影响。

automoc_moc_options不会影响project_automoc.cpp文件。它包含传递给MOC的选项,以创建" MOC_WIDGET_FPS.CPP"one_answers" MOC_WIDGET_SYSEVENTS.CPP"。这些应包含您的PCH。

也许更优雅的方法是禁用mocs_...文件的预编译标头。这使您可以保持AUTOMOC

append_to_source_file_property(
  ${CMAKE_CURRENT_BINARY_DIR}/<PROJECT_NAME_HERE>_autogen/mocs_compilation.cpp
  COMPILE_FLAGS " /Y- ")

另外,如果您可以/愿意更改预编译标题文件的名称和内容,则可以将其添加到其中:

#ifdef HACK_FOR_TRICKING_MOC_INTO_INCLUDING_ME_IN_THE_MOCS_FILE_DO_NOT_DEFINE
Q_OBJECT
#endif

这将欺骗CMake将其包含在mocs_...文件中。然后,您需要它位于需要更改名称的顶部,首先将文件排序,然后是大写,然后是小写,例如 1_precompiled.h应该做这个问题。

相关内容

  • 没有找到相关文章

最新更新