2015-05-07 2 views
12

В binding.gyp Я хочу, чтобы установить, как это:Использование узла лавочка предопределенной переменной PRODUCT_DIR

"libraries": [ "-Wl,-rpath,<working directory>/build/Release/" ]

Я использую следующую конфигурацию, чтобы сделать то же самое:

"libraries": [ "-Wl,-rpath,<!(pwd)/build/Release/" ]

это работает но проблема заключается в том, что он не будет работать в Windows или там, где pwd недоступен, а также это не самый лучший вариант, поскольку уже существует предопределенный var iable PRODUCT_DIR доступно в node-gyp для этого. Странно я не могу использовать эту переменную PRODUCT_DIR.

Я пробовал следующие варианты, но не повезло. ошибка говорит Library not loaded: @rpath/<lib>.dylib (RPATH не получает набор):

  • "libraries": [ "-Wl,-rpath,>(PRODUCT_DIR)/build/Release/" ]
  • "libraries": [ "-Wl,-rpath,<(PRODUCT_DIR)/build/Release/" ]
  • "libraries": [ "-Wl,-rpath,>(PRODUCT_DIR)"]
  • "libraries": [ "-Wl,-rpath,<(PRODUCT_DIR)"]

Когда я попробовал печать на "<!(echo <(PRODUCT_DIR) 1>&2)" он говорит builddir: command not found. Похоже, переменная имеет значение builddir. Не следует ли печатать целевой каталог вместо builddir? или builddir означает что-то для компилятора?

Я не использую эту переменную должным образом или есть какая-либо другая переменная, которую я должен использовать?

+0

Вы пробовали '$ (PRODUCT_DIR)'? Возможный дубликат http://stackoverflow.com/questions/17023442/referring-to-environment-variables-from-binding-gyp-node-gyp –

+0

Пробовал, но не повезло :(Если я определяю пользовательскую переменную, я могу использовать его '<(user_defined_variable_dir)', но предварительно определенная переменная 'PRODUCT_DIR' не работает. –

+0

К счастью, в Windows мой' addon' работает даже без установки 'rpath' :) Итак, теперь я добавил условие и установил' rpath' путем выполнения 'pwd' где' 'OS! = 'win'" '. https://github.com/royalpinto/node-cares/blob/master/binding.gyp –

ответ

1

PRODUCT_DIR ведет себя действительно странно, я должен сказать. Я избегаю этого, когда это возможно. Часто записывая внешние скрипты сборки с простым узлом.

Причина, по которой вы не можете "<!(echo <(PRODUCT_DIR) 1>&2)", это какая-то специальная переменная для node-gyp.

Однако вы используете правильный формат, как here ...

{ 
    'files': [ '<(PRODUCT_DIR)/libzip.dll' ], 
    'destination': '<(module_path)' 
} 

Мое предположение, однако, что вам нужно ...

"variables": { 
    "YOUR_DIR: "<(PRODUCT_DIR)/build/Release/"", 
    "your_libs": "-Wl,-rpath,<(CURRENT_DIR) ]" 
} 

Вы знаете, это Python, мы не не знаю о :)