首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++项目的单个共享预编译头(多个库和可执行文件)使用CMake

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

Stack Overflow用户
提问于 2014-08-08 10:31:24
回答 1查看 777关注 0票数 1

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

假设我有这个项目结构

代码语言:javascript
复制
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

首先,我希望在库文件可见的位置使用prepiled.h和precompiled.cc (仅包括预编译.h)构建precompiled.cc,然后使用它们构建lib1和lib2。

这能用CMake来完成吗?

EN

回答 1

Stack Overflow用户

发布于 2014-08-08 21:45:58

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

代码语言:javascript
复制
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作为这两个目标的依赖项,以强制执行正确的构建顺序:

代码语言:javascript
复制
add_dependencies(lib1 precompiled)
add_dependencies(lib2 precompiled)

我之所以说这并不完美,是因为每次构建lib1lib2时(至少对我来说)都会从头开始重建lib1lib2(我不知道为什么)。但是,如果这是可以接受的,那么这个解决方案应该是可行的。

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

https://stackoverflow.com/questions/25201442

复制
相关文章

相似问题

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