【问题标题】:Run configure in gyp file在 gyp 文件中运行配置
【发布时间】:2014-12-03 15:21:12
【问题描述】:

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

【问题讨论】:

    标签: node.js autotools autoconf node-gyp gyp


    【解决方案1】:

    使用 gyp actions'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 允许运行多个命令

    【讨论】:

      【解决方案2】:

      您可以使用command line expansion 在gyp 中执行任意命令。但是,正如您所指出的,如果您想跨平台,这并不可靠。

      通常,如果您希望它是跨平台的,则需要“gyp-ify”您的依赖项。这意味着创建一个单独的 gyp 文件,该文件作为依赖项 gyp 包含在您的主 binding.gyp 中。这可能需要一些时间,因为您必须列出所有要编译的源文件,并且您还必须添加任何必要的特定于库的编译标志(例如,如果一个库使用像 -Dfoo 这样的编译时定义) .

      您也可以考虑使依赖项动态化,而不是捆绑您要包装的库的源代码,而只是动态链接到该库。这要容易得多,因为您不必“gyp-ify”库,您只需将 libraries: ['-lfoo'] 之类的一些内容添加到您的 binding.gyp

      【讨论】:

        猜你喜欢
        • 2014-11-03
        • 2013-07-12
        • 1970-01-01
        • 1970-01-01
        • 2019-12-23
        • 2020-07-14
        • 2016-05-01
        • 2014-04-03
        • 2015-09-26
        相关资源
        最近更新 更多