2017-12-11 13 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의 이름을 변경했다.