Как переопределить значение переменной для GN target/ шаблона?
Я добавил shared_library
Цель GN в моей сборке Chromium. Имеет расширение согласно определению в 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
меняет имя файла, а не расширение)
Как логическое продолжение вопроса можно ли переопределить переменные типа is_debug
или же is_component_build
не в.gn файле, а только для цели / шаблона?
Допустим, я хочу построить V8
как is_component_build=true
(и сделать это в v8.gni
в шаблонах), но остальной код принимает значение по умолчанию или пользовательскую переменную.
1 ответ
В моем случае добавление output_extension
работал на меня:
shared_library(target_name) {
output_extension = "cr.so"
...
}
Не уверен насчет общего случая переопределения переменных.