gpt4 book ai didi

c++ - 使用 CMake 的 C++ 项目(多个库和可执行文件)的单个共享预编译头文件

转载 作者:太空宇宙 更新时间:2023-11-04 13:47:37 25 4
gpt4 key购买 nike

我想知道这里是否有人设法使用 CMake 在项目中的单个位置构建预编译 header ,然后从该位置使用它来构建项目的其他库和可执行文件。我设法做到这一点的唯一方法是在每个库/可执行文件夹中手动复制 pch 文件,但我想避免必须这样做,因为它需要大量空间和时间。

假设我有这个项目结构

root
| include
- precompiled.h
- common_project_header_files
| src
| precompiled
- precompiled.cc
| lib1
- source/header files for lib1
| lib2
- source/header files for lib2
| lib

我想首先使用 precompiled.hprecompiled.cc(仅包括 precompiled。 h) 在库文件可见的位置,然后从那里使用它来构建 lib1 和 lib2。

这可以使用 CMake 完成吗?

最佳答案

我遇到了同样的问题并找到了一个可行的解决方案(尽管并不完美,请参见下文)。假设 precompiled 是在构建目录中创建 precompiled.pch 的构建命令的目标。将自定义命令添加到 precompiled,如下所示:

add_custom_command(TARGET precompiled POST_BUILD
COMMAND ${CMAKE_COMMAND} -E
copy "${CMAKE_BINARY_DIR}/precompiled.pch"
"${CMAKE_SOURCE_DIR}/include/precompiled.pch")

这会在构建时将 precompiled.pch 复制到您的 include 文件夹中。但是,如果您的 lib1lib2 目标是在 precompiled 之前构建的,您仍然会遇到问题,因此您必须添加 precompiled 作为这两者的依赖来强制执行正确的构建顺序:

add_dependencies(lib1 precompiled)
add_dependencies(lib2 precompiled)

我说这不完美的原因是(至少对我而言)precompiled.pch 每次 lib1 都会从头开始重建lib2 是内置的(我不知道为什么)。不过,如果您可以接受,则此解决方案应该可行。

关于c++ - 使用 CMake 的 C++ 项目(多个库和可执行文件)的单个共享预编译头文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25201442/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com