【问题标题】:GCC, CMake, precompiled headers and maintaining dependenciesGCC、CMake、预编译头文件和维护依赖项
【发布时间】:2019-03-19 11:29:04
【问题描述】:

我试图弄清楚如何维护我的预编译头文件的依赖关系。它包括STL 标头、一些第三方(如boost)以及我们很少更改的一些基础设施标头。

我想出了这样的东西

SET(PCH_DIR ${CMAKE_CURRENT_BINARY_DIR})
SET(PCH_HEADER ${CMAKE_CURRENT_SOURCE_DIR}/../include/server/server.h)
SET(PCH_DST server.h.gch)
ADD_CUSTOM_TARGET(serverPCH DEPENDS ${PCH_DST})
ADD_CUSTOM_COMMAND(OUTPUT ${PCH_DST} ${PCH_DEP}
                   COMMAND ${CMAKE_CXX_COMPILER} -x c++-header ${COMMON_CXXFLAGS} ${COMPILER_DEFINITIONS} -std=gnu++1z -c ${PCH_HEADER} -o ${PCH_DST} -I${CMAKE_SOURCE_DIR}/lib/include/server -I${CMAKE_SOURCE_DIR}/lib/include
                   MAIN_DEPENDENCY ${PCH_HEADER}
                   WORKING_DIRECTORY ${PCH_DIR}
                   COMMENT "Building precompiled header"
                   VERBATIM)

看起来它正在完成它的工作,一旦编辑了标题,它就会重新编译。但是,当 server.h 中包含的文件之一发生更改时,不会触发 PCH 重新编译。如果server.h 中包含的任何标头发生更改,是否有办法触发重新编译?

【问题讨论】:

  • 您需要为所有*.o 对象文件添加对server.h.gch 的依赖项。我不知道如何在cmake 中做到这一点
  • @BasileStarynkevitch 我知道该怎么做,但是 1)它很难看 :) 2)我认为它不会触发 PCH 重建,因为从 CMake 的角度来看 server.h.gch 已启动迄今为止,因为它对其包含的标题一无所知
  • 您还需要添加来自server.h 的依赖项,并将所有包含的标头添加到server.h.gch
  • @BasileStarynkevitch 依赖于server.h 以及所有包含的头文件到server.h.gch 不应该反之亦然(即server.h.gch 的依赖来自server.h) ?我相信我听错了你的措辞。
  • @BasileStarynkevitch,比如在MAIN_DEPENDENCY中添加(和维护)无数个包含文件?

标签: c++ gcc cmake precompiled-headers


【解决方案1】:

嗯,2 年后。 CMake 现在支持 precompiled headersunity 构建。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-08
    • 2014-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-13
    • 2010-09-08
    • 2011-11-19
    相关资源
    最近更新 更多