代码之家  ›  专栏  ›  技术社区  ›  4ntoine

如何覆盖GN目标/模板的变量值?

  •  0
  • 4ntoine  · 技术社区  · 7 年前

    我添加了 shared_library 我的Chromium build中的GN目标。它具有中定义的扩展名 toolchain.gni 规则:

    # Extension for shared library files (including leading dot).
    if (is_mac || is_ios) {
      shlib_extension = ".dylib"
    } else if (is_android && is_component_build) {
      # By appending .cr, we prevent name collisions with libraries already
      # loaded by the Android zygote.
      shlib_extension = ".cr.so"
    } else if (is_posix) {
      shlib_extension = ".so"
    } else if (is_win) {
      shlib_extension = ".dll"
    } else {
      assert(false, "Platform not supported")
    }
    
    # Prefix for shared library files.
    if (is_posix) {
      shlib_prefix = "lib"
    } else {
      shlib_prefix = ""
    }
    

    我想更改扩展名,因此需要覆盖 shlib_extension 变量,但仅适用于我的 shared\u库 目标如果我修改 工具链。国民总收入 它将影响所有使用 shlib\U扩展 变量

    我不想使用 output_name shared\u library属性,如我所见,使用 out_name="lib${target_name}.cr" 进行以下操作 v8.ninja :

    ...
    output_extension = .so
    output_dir = .
    solibs = ./libv8_libbase.cr.so
    

    但如果有 shlib_ext=".cr.so" 进行以下操作 v8.ninja :

    ...
    output_extension = .cr.so
    output_dir = .
    solibs = ./libicui18n.cr.so ./libicuuc.cr.so ./libv8_libbase.cr.so
    

    (这意味着 output\u名称 更改文件 名称 扩大 )

    作为问题的逻辑延续,是否可以覆盖以下变量 is_debug is_component_build 不在。gn文件,但仅用于目标/模板?

    比如说我想建造 V8 就像 is_component_build=true (并在 v8.gni 但rest代码采用默认或用户定义的变量值。

    1 回复  |  直到 7 年前
        1
  •  0
  •   4ntoine    7 年前

    在我的情况下,添加 output_extension 为我工作:

    shared_library(target_name) {
      output_extension = "cr.so"
      ...
    }
    

    不确定重写变量的一般情况。

    推荐文章