C++ 叮当作响的CMAKE预编译头

C++ 叮当作响的CMAKE预编译头,c++,cmake,clang,precompiled-headers,C++,Cmake,Clang,Precompiled Headers,我已经找到了很多关于如何为MSVC使用预编译头的例子,但是我似乎找不到任何使用clang的例子。从这篇文章中,我可以看到铿锵命令,但我想知道它们是如何转化为cmake的: 要创建预编译的头文件,请将未将>>更改为Query.h的所有头文件包括在内,并使用: clang-cc1query.h-emit pch-o Query.h.pch 要使用预编译的标头类型,请执行以下操作: clang-cc1-include pch Query.h.pch Query.cpp-shared-o libquer

我已经找到了很多关于如何为MSVC使用预编译头的例子,但是我似乎找不到任何使用clang的例子。从这篇文章中,我可以看到铿锵命令,但我想知道它们是如何转化为cmake的:

要创建预编译的头文件,请将未将>>更改为Query.h的所有头文件包括在内,并使用:

clang-cc1query.h-emit pch-o Query.h.pch 要使用预编译的标头类型,请执行以下操作:

clang-cc1-include pch Query.h.pch Query.cpp-shared-o libquery.so; Query.cpp需要包括Query.h


编辑:使用clang 6和cmake 3.11.2找到了一个适合我的解决方案:

# add the pch custom target as a dependency
add_dependencies(corelib pch)

# add the flag
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -include-pch ${CMAKE_CURRENT_BINARY_DIR}/stdinc.hpp.pch")

# target
add_custom_target(pch COMMAND clang -x c++-header ${CMAKE_CURRENT_SOURCE_DIR}/src/stdinc.hpp -o ${CMAKE_CURRENT_BINARY_DIR}/stdinc.hpp.pch)

我猜使用编译器缓存可能会比使用预编译头带来更大的好处,并且可以同时避免PCHs的所有问题。我已经在使用ccache了,但是这个项目相当大。如果任何主头文件发生更改,重新编译需要约20分钟。我确实有一个stdinc.hpp文件,它永远不会改变,我想如果我能将它作为一个预编译头,编译时间只会提高一个理论。建议的答案是重复的,正如OP抱怨的那样,显示了很多MSVC示例,所以我怀疑它是否回答了他的问题。同意@MichaelSurette不确定为什么它被标记为重复。哎呀,对不起,复制错了。找到了MSVC单词,但没有注意到这是一个没有单词的问题@BradenEdmunds:当提到你的问题帖子中的另一个问题时,最好引用该问题/答案中的关键短语。另外两行代码不会对你的问题帖子造成伤害,但是有了它们,你不需要打开引用的问题来理解你想要什么。