1

当使用默认的 qmake 编译器(通过SOURCES变量)时,我可以像这样使用预编译的头文件:

CONFIG += precompile_header
PRECOMPILED_HEADER = stable.h
SOURCES = main.c

但是,我想使用自定义编译器(通过QMAKE_EXTRA_COMPILERS)。我试过这个:

CONFIG += precompile_header
PRECOMPILED_HEADER = stable.h
MY_SOURCES = main.c

my.input = MY_SOURCES
my.output = ${QMAKE_FILE_IN_BASE}.o
my.commands = clang $$QMAKE_CFLAGS_USE_PRECOMPILE -c ${QMAKE_FILE_IN} -o ${QMAKE_FILE_OUT}
QMAKE_EXTRA_COMPILERS += my

...并且预编译头文件已构建,但我的自定义编译器失败,因为QMAKE_CFLAGS_USE_PRECOMPILE不包含预编译头文件的路径。(它被定义为-Xclang -include-pch -Xclang ${QMAKE_PCH_OUTPUT},显然${QMAKE_PCH_OUTPUT}是空的。)

如何获取生成的预编译头文件的名称,以便将其作为参数传递给我的自定义编译器?

4

1 回答 1

2

查看 qmake 源代码,预编译的标头处理似乎被硬编码UnixMakefileGenerator::init()为仅适用于内置 C、CXX、OBJC 和 OBJCXX 编译器。

QMAKE_PCH_OUTPUT,对于 GCC 和 Clang 样式的预编译头文件,是通过组合PRECOMPILED_DIR, TARGETc/ c++/ objective-c/objective-c++QMAKE_PCH_OUTPUT_EXT. 因此,在问题的第二个示例中,以下命令行应该可以工作:

my.commands = clang -Xclang -include-pch -Xclang $$TARGET/c$$QMAKE_PCH_OUTPUT_EXT -c ${QMAKE_FILE_IN} -o ${QMAKE_FILE_OUT}
于 2013-01-29T05:41:06.887 回答