如何在chrome的gn文件中包含共享库?

时间:2018-03-05 03:05:45

标签: shared-libraries static-libraries chromium ninja gn

(Q1)我有一个test.so有一些我需要使用的功能。我已经调查了一段时间但没有答案。任何人都可以建议如何在铬项目的gn文件中包含共享库?非常感谢。

以下是我的gn文件的内容:

import("//third_party/WebKit/Source/core/core.gni")

blink_core_sources("frame") {
 sources = [
    "csp/CSPSource.h",
    "csp/ContentSecurityPolicy.cpp",
    "csp/ContentSecurityPolicy.h",
    "csp/MediaListDirective.cpp",
    "csp/MediaListDirective.h",
    "csp/SourceListDirective.cpp",
    "csp/SourceListDirective.h",

    // my created file
    "HelloWorld.h",
    "HelloWorld.cpp",   // Will use the function of provided in add.so
    "add.h"
  ]

  deps = [ ":add.so" ]

}

(Q2)另一个问题是:如果我有add.so的源代码,我应该如何编写gn来使用共享库的源代码?感谢。

2 个答案:

答案 0 :(得分:1)

  

(Q1)有人可以建议如何在Chrome项目的gn文件中包含共享库吗?

通常,您可以使用lib_dirs指定库目录,并使用libs指定库。您的BUILD.gn文件可以是这样的:

import("//third_party/WebKit/Source/core/core.gni")

blink_core_sources("frame") {
 sources = [
    "csp/CSPSource.h",
    "csp/ContentSecurityPolicy.cpp",
    "csp/ContentSecurityPolicy.h",
    "csp/MediaListDirective.cpp",
    "csp/MediaListDirective.h",
    "csp/SourceListDirective.cpp",
    "csp/SourceListDirective.h",

    // my created file
    "HelloWorld.h",
    "HelloWorld.cpp",   // Will use the function of provided in add.so
    "add.h"
  ]

  lib_dirs = [ "//path/to/add.so" ]
  libs = [ "add" ]

}
  

(Q2)如果我有add.so的源代码,我应该如何在gn中编写以使用共享库的源代码?

如果要从add.so的源代码获取共享库,则可以编写一个BUILD.gn文件,如下所示:

shared_library("libadd.so") {
  include_dirs = []
  sources = [
    "/path/to/sources",
  ]
}

您可以使用gn help shared_library了解更多详细信息。

然后您可以像Q(1)一样使用共享库。

最后,我建议您使用gn help查看有关gn build系统的更多详细信息。

答案 1 :(得分:0)

我发现了一个受https://github.com/matlo607/conan-gn-generator启发的解决方案

config("myadd_import") {
  include_dirs = ["./mypath/include"]
  lib_dirs = [ "./mypath/lib" ]
  libs = ["libmyadd.so", "pthread"] # or use full path directly
  visibility = [ ":myadd" ]
}

group("myadd") {
  public_configs = [":myadd_import"]
}

然后可以在deps部门中使用它,例如:

executable("test") {
  sources = [
    "test.cpp"
  ]
  deps = ["//third:myadd"]
}