2017-12-11 19 views
0

サードパーティの共有ライブラリとリンクするネイティブのNode.jsモジュールを構築しようとしています。このライブラリは、異なるディレクトリに異なるOSやアーキテクチャ用に予めビルドされたバージョンを含むバンドルの一部として提供されます。ノード-gypでアーチ特有の場所にリンクする

/opt/Foo/linux/x86/lib/libfoo.so 
/opt/Foo/linux/x86/include/foo.h 
/opt/Foo/linux/x86_64/lib/libfoo.so 
/opt/Foo/linux/x86_64/include/foo.h 
/opt/Foo/linux/arm/lib/libfoo.so 
/opt/Foo/linux/arm/include/foo.h 
/opt/Foo/mac/x86_64/lib/libfoo.so 
/opt/Foo/mac/x86_64/include/foo.h 

私binding.gypは現在、次のようになります。

{ 
    'targets': [ 
    { 
     'target_name': 'foo', 
     'sources': ['foo.cpp', 'foo.h'], 
     'include_dirs': ["<!(node -e \"require('nan')\")"], 
     'conditions': [ 
     ['OS=="mac"', { 
      'include_dirs': ['/opt/Foo/mac/x86_64/include'], 
      'libraries': ['-L/opt/Foo/mac/x86_64/lib', '-lfoo'] 
      } 
     ], 
     ['OS=="linux"', { 
      'include_dirs': ['/opt/Foo/linux/x86_64/include'], 
      'libraries': ['-L/opt/Foo/linux/x86_64/lib', '-lfoo'] 
      } 
     ] 
     ] 
    } 
    ] 
} 

私は、現在のプラットフォームアーキテクチャ上で区別するconditionsための構文を見つけることができるようには見えません。

答えて

0

は、他の解決策を見つけていないた私は、次のを思い付いた:

... 
['OS=="linux"', { 
    'include_dirs': ["<!(node -e \"console.log('/opt/Foo/linux/%s/include',require('process').arch);\")"], 
    'libraries': ["<!(node -e \"console.log('-L/opt/Foo/linux/%s/lib',require('process').arch);\")", '-lfoo'] 
    } 
] 
... 

私はprocess.archからの出力に一致するように/opt/Foo/Linux/x64にディレクトリへ/opt/Foo/Linux/x86_64の名前を変更する必要がありました。

関連する問題