Linux下QT多项目共享预编译头:如何统一生成pch.gch文件?
Linux下Qt多项目共享预编译头配置方案
问题背景
我正在学习Linux环境下预编译头(precompiled headers)的使用方法,现有多个Qt项目(如test1、test2等)均共用头文件dp_pch.h。当前项目.pro配置如下:
CONFIG += precompile_header PRECOMPILED_DIR = $$DIR_SRC/Tools PRECOMPILED_HEADER += $$DIR_SRC/Tools/dp_pch.h
执行qmake和make后,预编译头虽生成,但会在$$DIR_SRC/Tools下创建如test1.gch的项目专属文件夹,内部仅有名为c++的PCH文件,导致无法跨项目共享。
解决配置
要让预编译头直接生成到指定目录并以统一名称存储,需调整以下配置:
1. 明确指定预编译头输出路径及文件名
在每个项目的.pro文件中添加PRECOMPILED_OUTPUT变量,替代默认的项目专属文件夹命名规则:
CONFIG += precompile_header PRECOMPILED_DIR = $$DIR_SRC/Tools # 用=而非+=,避免重复添加头文件路径 PRECOMPILED_HEADER = $$DIR_SRC/Tools/dp_pch.h # 指定最终生成的PCH文件,直接放在目标目录下 PRECOMPILED_OUTPUT = $$PRECOMPILED_DIR/dp_pch.gch
2. 保证所有项目编译参数一致
预编译头对编译环境高度敏感,所有共享该PCH的项目必须使用完全相同的编译选项(如C++标准版本、宏定义、优化级别等)。可将公共编译参数抽离到通用.pri文件中:
# common.pri 内容示例 QMAKE_CXXFLAGS += -std=c++17 -O2 DEFINES += QT_NO_DEBUG_OUTPUT QT_WIDGETS_LIB
然后在每个项目的.pro中引入该文件:
include($$DIR_SRC/common.pri)
3. 清理旧文件并重新编译
先删除之前生成的*.gch文件夹,避免编译冲突,再依次执行:
qmake make clean make
此时$$DIR_SRC/Tools目录下会直接生成dp_pch.gch,所有符合编译参数要求的项目均可共享使用。
内容的提问来源于stack exchange,提问作者Sergey U
相关产品推荐
相关产品推荐

