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

Использование 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.

Я пробовал следующие варианты, но не повезло. error говорит 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 означает что-то для компилятора?

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

4b9b3361

Ответ 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, мы не знаем о:)