如何在 gn 中设置全局编译标志,使其出现在 ninja 文件中?

Vel*_*kan 5 google-chrome chromium webrtc ninja gn

如何添加类似的事情-O2或定制-DSOMETHING,使他们出现在 cflagsdefines该* .ninja的文件?

重新编译这个:

https://webrtc.org/native-code/development/

它改变了构建系统。现在第一个构建步骤是:

gn gen out/Default --args='is_debug=false'
Run Code Online (Sandbox Code Playgroud)

建立在 Ubuntu 上,以自己为目标。

在哪里可以将它添加到 *.gn 或 *.gni 文件中?

Cha*_*son 1

不幸的是,没有从“args”到编译器调用的直接路径。由于 GN 支持多个并发工具链,因此不清楚您希望将其应用于哪一个,是否应应用于 C 编译器、C++ 编译器、链接器等。

这至少需要您的 GN“args”和您想要应用它的任何工具链之间进行一些协调。

因此,如果您的 BUILDCONFIG.gn 中有:

declare_args() {
  cl_cflags = ""
}
Run Code Online (Sandbox Code Playgroud)

然后在工具链中你有:

toolchain("my_toolchain") {
  tool("cc") {
    ...
    command = "cc ... ${cl_cflags}"
  }
}
Run Code Online (Sandbox Code Playgroud)

然后调用./gn gen out/Default --args='cl_cflags="-DFOO"'将发出 Ninja 文件,其中包含-DFOO添加到 C 编译器的每次调用中的 Ninja 文件。

请注意,您必须为每个工具链手动添加此功能,并且无法在一次性场景中将其关闭,因为 GN 并不“知道”它(它不是一个等config)。