CMake,Qt,gcc和预编译头文件

时间:2010-10-02 11:04:21

标签: qt gcc header cmake precompiled

我(再一次)在Apple平台上与gcc和Qt一起创建预编译头文件。

现在创建我的预编译头时,我使用代码部分(基于旧的“PCHSupport_26.cmake”)来提取编译标志,如下所示:

STRING(TOUPPER "CMAKE_CXX_FLAGS_${CMAKE_BUILD_TYPE}" _flags_var_name)
SET(_args ${CMAKE_CXX_FLAGS} ${${_flags_var_name}})
GET_DIRECTORY_PROPERTY(DIRINC INCLUDE_DIRECTORIES )
FOREACH(_item ${DIRINC})
   LIST(APPEND _args "-I${_item}")
ENDFOREACH(_item)
GET_DIRECTORY_PROPERTY(_defines_global COMPILE_DEFINITIONS)
LIST(APPEND defines ${_defines_global})
STRING(TOUPPER "COMPILE_DEFINITIONS_${CMAKE_BUILD_TYPE}" _defines_for_build_name) GET_DIRECTORY_PROPERTY(defines_build ${_defines_for_build_name})
LIST(APPEND _defines ${_defines_build})
FOREACH(_item ${_defines})
   LIST(APPEND _args "-D${_item}")
ENDFOREACH(_item ${_defines})
LIST(APPEND _args -c ${CMAKE_CURRENT_SOURCE_DIR}/${PRECOMPILED_HEADER} -o ${_gch_filename})
SEPARATE_ARGUMENTS(_args)

不幸的是,上面的编译器标志错过了CMake在使用内置编译器规则时生成的两个重要参数: -DQT_DEBUG 当使用生成的预编译头进行编译时,我得到如下错误: file.h:未使用,因为QT_DEBUG已定义。

我需要你的帮助以下内容:

  1. 上述检索编译器标志的方法是否正确?
  2. 有更好,更简单,更简单的方法吗?
  3. 为什么-DQT_DEBUG未显示在COMPILE_DEFINITIONSCOMPILE_DEFINITIONS_${CMAKE_BUILD_TYPE}

1 个答案:

答案 0 :(得分:1)

如果您只是使用XCode:

    SET_TARGET_PROPERTIES(${target} PROPERTIES XCODE_ATTRIBUTE_GCC_PRECOMPILE_PREFIX_HEADER YES)
    SET_TARGET_PROPERTIES(${target} PROPERTIES XCODE_ATTRIBUTE_GCC_PREFIX_HEADER "${target}/std.h")

我正在尝试通过CMake在Linux上使用带有原始gcc的预编译头文件,但我还没有想到它。看起来它正在工作,但我没有看到任何速度改进。

编辑: 我设法在gcc中使用了pch,你可以在这里找到你的宏:http://www.mail-archive.com/cmake@cmake.org/msg04394.html