我正在尝试编写一个生成 .gch 文件的 GN 文件。我在这里浏览了 GN 文档
我只是不明白如何实现这一点,我是 GN 新手。所以让我解释一下我想要实现的目标。
我希望 GN 创建以下一对编译器命令:
my-clang -x c++-header pch/hello_world.h -o pch/hello_world.h.gch
my-clang -include pch/hello_world.h -o hello.out -c hello_world.cpp
我希望能够在我的 GN 文件中创建一个源集,如下所示:
source_set("source_set0") {
precompiled_source = "//pch/hello_world.h"
precompiled_header = "../pch/hello_world.h"
cflags = [
"-include$precompiled_header"
]
sources = [
"//hello_world.cpp",
]
}
然而,这实际上并没有生成预编译的头文件。
我希望我需要另一个 source_set 或等效项来专门编译头文件,但是我的理解是编译器需要 .gch 后缀才能将文件识别为预编译头文件。
所以我想我需要说服 GN 根据目标创建特定的输出文件
- hello_world.h 文件输出 hello_world.h.gch
- hello_world.cpp 输出 hello_world.o
理想情况下,我希望能够修改我的工具规范:
tool("cxx") {{
command = "\"{cxx_exe}\" ... -c {{{{source}}}} -o {{{{output}}}}"
outputs = [
"{{{{source_out_dir}}}}/{{{{target_output_name}}}}.{{{{source_name_part}}}}.o",
**SOME CONDITION**
"{{{{source_out_dir}}}}/{{{{target_output_name}}}}.{{{{source_name_part}}}}.h.gch",
]
}}
然而,我对工具变量的阅读表明上述功能仅适用于 linker_tools。
GN 似乎也需要一些说服力来将 cxx 工具与 .h 文件相关联。
有没有人对此有任何经验或能够指出我正确的方向。
TL;博士
- 我想用 GN 编译头文件以生成 .gch 文件
- 我想在后面的编译步骤中使用 gch
- 按照文档没有帮助,我是不是误会了
- 如何说服 GN 编译 .h 文件
- 我是否需要确保头文件的编译首先发生
谢谢你的时间
ps cpp 文件内容:
int main (void){
const char* greeting = "Hello world";
print_greeting(greeting);
}
.h 文件内容
#pragma once
#include <iostream>
void print_greeting(const char* greeting){
std::printf("%s", greeting);
}