c++ - 添加/删除 .cpp 文件后,带有 PCH 的 CMake 重建所有项目
问题描述
我正在为我的大项目使用 CMake,并使用 target_precompile_headers 来生成 .pch 文件。
问题:每次我在目标源列表中添加或删除 .cpp 文件时,每个翻译单元都会重新编译
为了演示问题,我使用这种结构创建了非常基本的项目:
CMakeLists.txt 非常简单:
cmake_minimum_required(VERSION 3.16)
set(CMAKE_CXX_STANDARD 17)
project(SuperBasicProject)
set(TARGET_NAME ${PROJECT_NAME})
add_executable(${TARGET_NAME} main.cpp empty_cpp1.cpp)
target_include_directories(${TARGET_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
target_precompile_headers(${TARGET_NAME} PRIVATE my_pch.h)
第一次运行后的编译器输出:
Scanning dependencies of target SuperBasicProject
[ 25%] Building CXX object CMakeFiles/SuperBasicProject.dir/cmake_pch.hxx.pch
[ 75%] Building CXX object CMakeFiles/SuperBasicProject.dir/empty_cpp1.cpp.o
[ 75%] Building CXX object CMakeFiles/SuperBasicProject.dir/main.cpp.o
[100%] Linking CXX executable SuperBasicProject
[100%] Built target SuperBasicProject
然后我通过修改 add_executable 行将另一个源文件(empty_cpp2.cpp)添加到项目中:
add_executable(${TARGET_NAME} main.cpp empty_cpp1.cpp empty_cpp2.cpp)
然后重新加载cmake并按下构建按钮。
编译器输出:
Scanning dependencies of target SuperBasicProject
[ 20%] Building CXX object CMakeFiles/SuperBasicProject.dir/cmake_pch.hxx.pch
[ 80%] Building CXX object CMakeFiles/SuperBasicProject.dir/empty_cpp2.cpp.o
[ 80%] Building CXX object CMakeFiles/SuperBasicProject.dir/main.cpp.o
[ 80%] Building CXX object CMakeFiles/SuperBasicProject.dir/empty_cpp1.cpp.o
[100%] Linking CXX executable SuperBasicProject
[100%] Built target SuperBasicProject
为什么每个翻译单元都被重新编译以及如何解决这个问题?那么目标是一个具有大量代码库的项目,这种行为是不可接受的。也许我使用 target_precompile_headers 错误,或者可能有另一种方法,它不会重新编译所有内容。我将不胜感激任何帮助。
解决方案
推荐阅读
- excel - 像 Excel 一样显示不带小数的数字
- sql - SQL 查询 - 选择等于或小于特定年龄的客户
- c - 以二进制文件(.ts)的形式循环写入缓冲区
- javascript - 我创建了一个包 npm 进行测试,安装后我无法检索函数的参数
- python - 熊猫。转换表结构
- python - 带有 find -exec 的 subprocess.run 不返回预期的输出
- python - 如何使 Telegram 中的 InlineKeyboardButton 触发命令?
- php - 每 3 次迭代后包装 div 并计算里面的每个 div
- azure-active-directory - MS Graph Sites.Selected 权限 POST=403。需要什么角色?
- powershell - 如何使用powershell一次执行一个单独的Jmeter测试计划?