Использование предопределенной переменной node-gyp PRODUCT_DIR

В binding.gyp я хочу установить так:

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

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

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

Это работает, но проблема в том, что это не будет работать в Windows или там, где pwd недоступен, а также это не лучший вариант, поскольку для этого уже есть предопределенная переменная 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 означает что-то для компилятора?

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


person Royal Pinto    schedule 07.05.2015    source источник
comment
Вы пробовали $(PRODUCT_DIR)? Возможный дубликат stackoverflow.com/questions/17023442/   -  person Lovell Fuller    schedule 13.05.2015
comment
Пробовал, но безуспешно :( Если я определяю определяемую пользователем переменную, я могу ее использовать <(user_defined_variable_dir), но предопределенная переменная PRODUCT_DIR не работает.   -  person Royal Pinto    schedule 13.05.2015
comment
К счастью, в Windows мой addon работает даже без установки rpath :) Так что пока я добавил условие и настройку rpath, выполнив pwd, где "OS!='win'". github.com/royalpinto/node-cares/blob/master/binding. гып   -  person Royal Pinto    schedule 13.05.2015


Ответы (1)


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

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

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

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

Я предполагаю, однако, что вам нужно...

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

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

person eljefedelrodeodeljefe    schedule 19.09.2015