使用 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的主要内容,如果未能解决你的问题,请参考以下文章