首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GN add子目录,该子目录具有makefile

GN add子目录,该子目录具有makefile
EN

Stack Overflow用户
提问于 2021-05-21 15:49:37
回答 1查看 232关注 0票数 0

我正在尝试向铬添加一个功能,它需要第三方库tpm2-tss。这个库有一个makefile来构建它。

我在tpm目录中添加了一个文件夹,并添加了一个BUILD.gn文件。此外,库作为子目录添加到此文件夹中。

代码语言:javascript
复制
thirdparty
   ...other third-party folders
   tpm
      BUILD.gn
      tmp2-tss/
         Makefile
         ...

我尝试通过以下方法添加库

代码语言:javascript
复制
config("tpm_config"){
  include_dirs = ["tpm2-tss"]
}

在BUILD.gn中,然后在想要使用库的地方使用configs += ["//thirdparty/tpm:tpm_config"]。当然,这并不是因为tpm2-tss库不是只标头的。但是,我无法找到一种方法来告诉GN构建系统使用它提供的Makefile来构建/链接这个库。

是否有一种方法可以使用GN内部的makefile,还是需要将Makefile重写为BUILD.gn?

这只是为了证明一个概念,所以我不需要一个适当的解决方案,以满足铬储存库的通常标准。

EN

回答 1

Stack Overflow用户

发布于 2022-02-04 19:23:50

GN对其他构建系统一无所知,它要求您为编译/归档/链接以外的任何内容构建操作(或模板)。

因此,在您的示例中,您可能希望在第三方的根目录中放置一个BUILD.gn文件,如下所示:

代码语言:javascript
复制
action("tpm") {
  script = "make.py" # assumes you're using Python
  outputs = [ "${target_out_dir}/libtpm.a", ... ] # or whatever
  sources = [ ... ] # List tpm sources here
  args = [ ... ] # whatever make.py needs
}

如果tpm不经常更改,或者在更改之前总是清理您的构建,则可以跳过sources部分;GN只需要在目标上发出源文件依赖项。

或者,如果这是您经常做的事情,您可以将其封装在一个模板中:

代码语言:javascript
复制
template("make") {
  action(target_name) {
    script = "//path/to/make.py"
    ...
  }
}

然后在您的BUILD.gn文件中使用它:

代码语言:javascript
复制
import("//path/to/make.gni")

make("tpm") {
  ...
}

您的make.py可能如下所示:

代码语言:javascript
复制
import subprocess
return subprocess.run(['make', '-j'], check=True).returncode
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67640150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档