如何构建 crashpad 的动态(共享)库?

How to build dynamic (shared) libraries of crashpad?

Crashpad 是一个用于 C++ 应用程序的错误报告系统。 https://chromium.googlesource.com/crashpad/crashpad/+/HEAD/doc/developing.md

构建说明是

 $ cd ~/crashpad/crashpad
 $ gn gen out/Default
 $ ninja -C out/Default

我可以构建预定义的静态库,但我还没有找到如何使用 gnninja 生成共享库的方法。

生成 ninja 文件后,为每个 ninja 文件找到开关 /MTd(调试)或 /MT(发布版本)并将其更改为 /MDd 或 /MD,以便创建动态库

然后你可以用 ninja 构建 crashpad,输出仍然是 lib 文件,所以当你 link 它们到你的项目时它们将包含在 exe 文件中(你不必将它们添加到你的项目中使用 dll)。

在 运行 gn gen out\Default 之后,您可以编辑 out\Default\toolchain.ninja 文件,为 cccxx 规则的命令添加额外的编译器标志。

rule cc
  command = ninja -t msvc -e environment.amd64 -- cl.exe ... ${cflags} ${cflags_c} /c ...
                                 add the /MD compiler flag after the others, here ^

我们今天又看了一遍。如果您 运行 gn args --list out\Default 您会注意到以下内容:

extra_cflags
    Current value (from the default) = ""
      From //third_party/mini_chromium/mini_chromium/build/BUILD.gn:50

    Extra flags passed to the C compiler.
    Space-separated string of flags.
    "cflags" are passed to all invocations of the C, C++, Objective-C, and
    Objective-C++ compilers.

/MDd 标志添加到构建配置 运行 gn args out\Default 并将 extra_cflags="/MDd" 添加到构建配置。

@bobbyg603 的回答几乎 我需要的。

但通常事情不是手写的,而是嵌入在脚本中,因此打开编辑器来更改内容通常根本没有用。以编程方式,您还可以使用:

gn gen out\Default --args="extra_cflags=\"/MD\""

这也会顺便更改 cxx 的参数。