假设我有一个节点模块,它本质上是使用 autotools 围绕一些标准 C 库的包装器。因此,库本身将使用./configure
and安装make
,也许make install
. 包装代码只是几个文件,可以由 gyp 处理。但是我该如何处理依赖关系?在编译代码之前,如何指示 gyp 我要构建自动工具库?或者这是不可能的,因为 autotools 不能在 Windows 上运行?如果我无法运行configure
,是否有一些 gyp 方法可以做类似的事情,特别是检测哪些功能可用,哪些不可用?
问问题
988 次
2 回答
6
使用 gyp动作,'target_type': none
它可能看起来像这样:
{
'target_name': 'FTGL',
'type': 'none',
'dependencies': ['FreeType'],
'actions': [
{
'action_name': 'build_ftgl',
'message': 'Building FTGL...',
'inputs': ['ftgl/src/FTGL/ftgl.h'],
'outputs': ['ftgl/src/.libs/libftgl.a'],
'action': ['eval', 'cd ftgl && ./configure --with-pic && make -C src'],
},
],
}
注意:eval
在动作中使用允许运行多个命令
于 2014-12-04T18:22:04.733 回答
3
您可以使用命令行扩展在 gyp 中执行任意命令。但是,正如您所指出的,如果您想跨平台,这并不可靠。
通常,如果您希望它是跨平台的,则需要“gyp-ify”您的依赖项。这意味着创建一个单独的 gyp 文件,该文件作为依赖项 gyp 包含在您的 mainbinding.gyp
中。这可能需要一些时间,因为您必须列出所有要编译的源文件,并且您还必须添加任何必要的库特定编译标志(例如,如果库使用编译时定义,例如-Dfoo
)。
您还可以考虑使依赖项动态化,而不是捆绑您要包装的库的源代码,而只是动态链接到该库。这要容易得多,因为您不必“gyp-ify”库,您只需libraries: ['-lfoo']
在binding.gyp
.
于 2014-12-03T16:31:08.550 回答