【问题标题】:Using node-gyp Predefined Variable PRODUCT_DIR使用 node-gyp 预定义变量 PRODUCT_DIR
【发布时间】:2015-07-18 07:23:07
【问题描述】:

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)吗? stackoverflow.com/questions/17023442/… 的可能重复项
  • 试过但没有运气:(如果我定义了一个用户定义的变量,我可以使用它<(user_defined_variable_dir),但预定义的变量PRODUCT_DIR不起作用。
  • 幸运的是,在 Windows 上我的 addon 即使没有设置 rpath 也能工作 :) 所以现在我已经添加了一个条件并通过执行 pwd 来设置 rpath 其中"OS!='win'"github.com/royalpinto/node-cares/blob/master/binding.gyp

标签: c++ node.js node-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,我们不知道 :)

【讨论】:

    猜你喜欢
    • 2013-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-14
    • 2015-09-01
    • 1970-01-01
    • 2020-09-11
    相关资源
    最近更新 更多