2014-12-03 82 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使用的動作,它可以運行多個命令。