首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在CMake中使用预编译头

在CMake中使用预编译头
EN

Stack Overflow用户
提问于 2008-09-29 13:08:17
回答 10查看 78.6K关注 0票数 112

我在网上看到了一些(老的)帖子,关于在CMake中对预编译头文件的一些支持。它们看起来都有点无处不在,每个人都有自己的方式。目前最好的方式是什么?

EN

回答 10

Stack Overflow用户

发布于 2012-03-23 19:46:22

对于基于CMake的构建系统,有一个third party CMake module named 'Cotire'可以自动使用预编译头文件,也支持unity构建。

票数 79
EN

Stack Overflow用户

发布于 2009-09-04 15:46:04

我正在使用下面的宏来生成和使用预编译头:

代码语言:javascript
运行
复制
MACRO(ADD_MSVC_PRECOMPILED_HEADER PrecompiledHeader PrecompiledSource SourcesVar)
  IF(MSVC)
    GET_FILENAME_COMPONENT(PrecompiledBasename ${PrecompiledHeader} NAME_WE)
    SET(PrecompiledBinary "${CMAKE_CURRENT_BINARY_DIR}/${PrecompiledBasename}.pch")
    SET(Sources ${${SourcesVar}})

    SET_SOURCE_FILES_PROPERTIES(${PrecompiledSource}
                                PROPERTIES COMPILE_FLAGS "/Yc\"${PrecompiledHeader}\" /Fp\"${PrecompiledBinary}\""
                                           OBJECT_OUTPUTS "${PrecompiledBinary}")
    SET_SOURCE_FILES_PROPERTIES(${Sources}
                                PROPERTIES COMPILE_FLAGS "/Yu\"${PrecompiledHeader}\" /FI\"${PrecompiledHeader}\" /Fp\"${PrecompiledBinary}\""
                                           OBJECT_DEPENDS "${PrecompiledBinary}")  
    # Add precompiled header to SourcesVar
    LIST(APPEND ${SourcesVar} ${PrecompiledSource})
  ENDIF(MSVC)
ENDMACRO(ADD_MSVC_PRECOMPILED_HEADER)

假设您有一个包含所有源文件的变量${MySources},您想要使用的代码应该是

代码语言:javascript
运行
复制
ADD_MSVC_PRECOMPILED_HEADER("precompiled.h" "precompiled.cpp" MySources)
ADD_LIBRARY(MyLibrary ${MySources})

代码在非MSVC平台上仍然可以很好地工作。相当整洁:)

票数 34
EN

Stack Overflow用户

发布于 2019-08-30 03:13:18

CMake刚刚获得了对PCH(预编译头)的支持,它应该会在即将到来的3.16版本中可用,截止日期为2019-10-01:

https://gitlab.kitware.com/cmake/cmake/merge_requests/3553

代码语言:javascript
运行
复制
  target_precompile_headers(<target>
    <INTERFACE|PUBLIC|PRIVATE> [header1...]
    [<INTERFACE|PUBLIC|PRIVATE> [header2...] ...])

关于支持在目标之间共享PCH的讨论正在进行中:https://gitlab.kitware.com/cmake/cmake/issues/19659

https://blog.qt.io/blog/2019/08/01/precompiled-headers-and-unity-jumbo-builds-in-upcoming-cmake/上有一些额外的上下文(动机,数字)可用

票数 34
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/148570

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档