我shared_library
在我的 Chromium 构建中添加了 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_library
目标。如果我修改toolchain.gni
它将影响所有使用shlib_extension
变量的目标。
我不想使用output_name
shared_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_name
更改文件名,而不是扩展名)
作为问题的逻辑延续,是否可以覆盖.gn 文件中的变量,但仅适用于目标/模板is_debug
?is_component_build
假设我想构建V8
(is_component_build=true
并v8.gni
在模板中进行),但其余代码采用默认或用户定义的变量值。