7

假设我有一个节点模块,它本质上是使用 autotools 围绕一些标准 C 库的包装器。因此,库本身将使用./configureand安装make,也许make install. 包装代码只是几个文件,可以由 gyp 处理。但是我该如何处理依赖关系?在编译代码之前,如何指示 gyp 我要构建自动工具库?或者这是不可能的,因为 autotools 不能在 Windows 上运行?如果我无法运行configure,是否有一些 gyp 方法可以做类似的事情,特别是检测哪些功能可用,哪些不可用?

4

2 回答 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 回答