使用CMake的c++项目(多个库和可执行文件)的单个共享预编译头
Single shared precompiled header for C++ project (multiple libraries and executables) using CMake
我想知道这里是否有人设法使用CMake在项目内的单个位置构建预编译的头,然后从该位置使用它来构建项目的其他库和可执行文件。我设法做到这一点的唯一方法是在每个库/可执行文件夹中手动复制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
我想首先构建预编译的。Pch 使用预编译。h和预编译。Cc (只包括预编译的.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
文件夹每当它被构建。但是,如果您的lib1
和lib2
目标在precompiled
之前构建,那么您仍然会遇到问题,因此您必须添加precompiled
作为这两个目标的依赖项,以强制执行正确的构建顺序:
add_dependencies(lib1 precompiled)
add_dependencies(lib2 precompiled)
我说这是不完美的原因是(至少对我来说)precompiled.pch
将从头开始重建每一次lib1
或lib2
构建(我不知道为什么)。如果您可以接受,那么这个解决方案应该可以工作。
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 在cuda线程之间共享大量常量数据
- 如何从具有移动语义的类对象中生成共享指针
- 在c代码之间共享数据的最佳方式
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 如何将一个ostringstream十六进制字符串字符对转换为单个unit8t等价的二进制值
- 将静态库链接到不带-fPIC的共享库中
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 为什么std::互斥需要很长的、非常不规则的时间来共享
- 使用Boost Interprocess创建托管共享内存需要很长时间
- 多个 rocksdb 实例:使用单个共享缓存还是多个独立缓存?
- c++ 是否保证标头初始化的静态 const 成员跨编译单元和库共享单个实例?
- 从单个.cpp构建共享对象
- Linux共享库中全局变量的单个副本
- 使用CMake的c++项目(多个库和可执行文件)的单个共享预编译头
- c++在多个进程之间共享单个类对象
- Android OS框架-将单个可执行文件构建为共享对象
- C、c++:共享库:是加载到内存中的单个函数或完整库
- 如何在两个类之间共享单个临界区