2014-12-03 47 views
3

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

回答

2

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

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

您可能还会考虑使依赖性动态化,而不是捆绑您要打包的库的源代码,并且只是动态链接库。这很容易,因为您不必“图书馆”库,你只需要添加一些东西,如libraries: ['-lfoo']到你的binding.gyp

4

随着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使用的动作,它可以运行多个命令。