使用node-gyp预定义变量PRODUCT_DIR

Roy*_*nto 12 c++ node.js node-gyp

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对编译器意味着什么?

我没有正确使用这个变量,还是我应该使用其他任何可用的变量?

elj*_*efe 1

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

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

但是您使用的是正确的格式,就像这里......

{
   'files': [ '<(PRODUCT_DIR)/libzip.dll' ],
   'destination': '<(module_path)'
}
Run Code Online (Sandbox Code Playgroud)

但我的猜测是你需要......

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

你知道,它是 Python,我们不知道:)