我在我的铬版本中添加了shared_library 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更改文件名称,而不是扩展名)
作为问题的逻辑延续,是否有可能覆盖像is_debug或is_component_build这样的变量,而不是.gn文件中的变量,而仅用于目标/模板?
假设我想构建V8,就像is_component_build=true一样(并在v8.gni中使用templaets),但是其余的代码采用默认值或用户定义的变量值。
发布于 2018-03-02 14:08:37
在我的例子中,添加output_extension为我工作:
shared_library(target_name) {
output_extension = "cr.so"
...
}不确定重写变量的一般情况。
https://stackoverflow.com/questions/49028300
复制相似问题