Clang CMAKE 预编译头文件

3
我在如何为MSVC使用预编译头文件方面找到了很多例子,但是似乎找不到任何使用clang的例子。从这个SO帖子中,我可以看到clang命令,但我想知道它们如何转换成cmake:

使用预编译头文件减少clang编译时间

要创建预编译头,请将所有不更改的标头包含在Query.h中并使用以下命令:

clang -cc1 Query.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


我猜你使用编译器缓存(例如ccache)可能会获得更大的好处,而不是使用预编译头文件,同时还可以避免所有与PCH相关的问题。 - Jesper Juhl
我已经在使用ccache了,但是这个项目非常大。如果任何一个主头文件发生更改,重新编译需要大约20分钟的时间。我有一个stdinc.hpp文件从不改变,我认为如果我可以将其作为预编译头文件,编译时间会得到改善(只是一种理论)。 - Braden Edmunds
2
建议的重复答案显示了许多MSVC示例,正如OP所抱怨的那样,因此我怀疑它是否回答了他的问题。 - Michael Surette
同意@MichaelSurette,不确定为什么被标记为重复。 - Braden Edmunds
1
抱歉,重复了错误的内容。发现了“MSVC”这个词,但没有注意到它不适用于给定的问题。@BradenEdmunds:当在您的问题帖子中引用其他问题时,最好引用该问题/答案的关键短语。在您的问题帖子中增加两行代码不会有任何影响,但是有了它们,人们就不需要打开所引用的问题来理解您想要什么。 - Tsyvarev
1个回答

5

我找到了一个适合我的解决方案:

# 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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接