2

我(再次)在 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: not used because QT_DEBUGis defined。

我需要您在以下方面的帮助:

  1. 上述检索编译器标志的方法是否正确?
  2. 有没有更好、更简单、更简单的方法来做到这一点?
  3. 为什么-DQT_DEBUG没有出现在COMPILE_DEFINITIONSCOMPILE_DEFINITIONS_${CMAKE_BUILD_TYPE}
4

1 回答 1

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

于 2010-10-02T13:51:49.447 回答