makefile - GN Build 添加具有 makefile 的子目录
问题描述
我正在尝试向需要第三方库tpm2-tss的铬添加功能。这个库有一个生成文件来构建它。
我tpm
在third_party
目录中添加了一个文件夹并添加了一个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 Build 系统使用它提供的 Makefile 来构建/链接这个库。
有没有办法在 GN 中使用 makefile 或者我需要将 Makefile 重写为 BUILD.gn?
这只是为了证明概念,所以我不需要一个合适的解决方案来满足铬存储库的通常标准。
解决方案
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).returncode
推荐阅读
- java - 编写一个使用整数密钥加密 .txt 文件的 Java 程序
- python - 如何对 Python ASYNCIO 代码进行分析/基准测试?
- python - pyramid_mailer `Message` 和 `Content-Transfer-Encoding`
- javascript - 在谷歌表格中的同一功能中添加多个范围
- javascript - 列表错误显示在控制台中,但只有一个错误显示在 div
- vba - 将样式应用于选定文本未选定框
- spring-boot - Heroku SpringBoot ClassPathResource 获取 FileNotFoundException
- protractor - 如何等到进度条消失?
- c# - 如何实现管道?
- sql - “操作或方法的对象类型参数为空或无效。” 从另一个表单上的控件打开时出现空白表单错误