使用节点GYP预定义的变量product_dir

Using node-gyp Predefined Variable PRODUCT_DIR

本文关键字:变量 product dir 预定义 节点 GYP      更新时间:2023-10-16

binding.gyp中我想这样设置:

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

我正在使用以下配置执行相同的操作:

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

这有效,但问题在于,它在Windows或pwd不可用的地方都无法使用,这也不是最好的选择,因为node-gyp中已经有一个预定义的可变PRODUCT_DIR可用于实现这一目标。奇怪的是,我无法使用此变量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对于编译器来说意味着什么?

我不是正确使用此变量,还是我应该使用的其他变量?

PRODUCT_DIR的行为真的很奇怪,我必须说。我尽可能避免它。通常,通过用普通节点编写外部构建脚本。

您不能 "<!(echo <(PRODUCT_DIR) 1>&2)"的原因是节点gyp的某种特殊变量。

但是,您使用的是正确的格式,例如这里...

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

我的猜测是您需要...

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

你知道,这是python,我们不知道:)