使用 node-gyp 预定义变量 PRODUCT_DIR

Posted

技术标签:

【中文标题】使用 node-gyp 预定义变量 PRODUCT_DIR【英文标题】:Using node-gyp Predefined Variable 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)吗? ***.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 【参考方案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,我们不知道 :)

【讨论】:

以上是关于使用 node-gyp 预定义变量 PRODUCT_DIR的主要内容,如果未能解决你的问题,请参考以下文章

windows系统下node-gyp的配置使用

构建时的 node-gyp 链接库依赖项

将 wc_get_product() 与产品 ID 的 PHP 变量一起使用

MiniZinc决策变量非连续范围

Windows 使用 node-gyp

使用 node-gyp 交叉编译具有本机绑定的节点模块