我正在尝试向铬添加一个功能,它需要第三方库tpm2-tss。这个库有一个makefile来构建它。
我在tpm目录中添加了一个文件夹,并添加了一个BUILD.gn文件。此外,库作为子目录添加到此文件夹中。
thirdparty
...other third-party folders
tpm
BUILD.gn
tmp2-tss/
Makefile
...我尝试通过以下方法添加库
config("tpm_config"){
include_dirs = ["tpm2-tss"]
}在BUILD.gn中,然后在想要使用库的地方使用configs += ["//thirdparty/tpm:tpm_config"]。当然,这并不是因为tpm2-tss库不是只标头的。但是,我无法找到一种方法来告诉GN构建系统使用它提供的Makefile来构建/链接这个库。
是否有一种方法可以使用GN内部的makefile,还是需要将Makefile重写为BUILD.gn?
这只是为了证明一个概念,所以我不需要一个适当的解决方案,以满足铬储存库的通常标准。
发布于 2022-02-04 19:23:50
GN对其他构建系统一无所知,它要求您为编译/归档/链接以外的任何内容构建操作(或模板)。
因此,在您的示例中,您可能希望在第三方的根目录中放置一个BUILD.gn文件,如下所示:
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只需要在目标上发出源文件依赖项。
或者,如果这是您经常做的事情,您可以将其封装在一个模板中:
template("make") {
action(target_name) {
script = "//path/to/make.py"
...
}
}然后在您的BUILD.gn文件中使用它:
import("//path/to/make.gni")
make("tpm") {
...
}您的make.py可能如下所示:
import subprocess
return subprocess.run(['make', '-j'], check=True).returncodehttps://stackoverflow.com/questions/67640150
复制相似问题