【问题标题】:CMake, Qt, gcc and precompiled headersCMake、Qt、gcc 和预编译头文件
【发布时间】:2010-10-02 11:04:20
【问题描述】:

我(再一次)在 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}

【问题讨论】:

    标签: qt gcc header cmake precompiled


    【解决方案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

    【讨论】:

    • 感谢您的提示。不幸的是,这仅在使用 XCode 构建时有效,但在生成常规 make 文件时无效。
    猜你喜欢
    • 2019-03-19
    • 2012-09-08
    • 2014-02-23
    • 1970-01-01
    • 2012-06-13
    • 2010-09-08
    • 1970-01-01
    • 1970-01-01
    • 2010-09-13
    相关资源
    最近更新 更多