c++ - 使用 node-gyp 预定义变量 PRODUCT_DIR

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

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

最佳答案

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

你不能"<!(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,我们不知道 :)

关于c++ - 使用 node-gyp 预定义变量 PRODUCT_DIR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30105839/

相关文章:

node.js - 为什么单个浏览器请求要处理多个请求?

node.js - Azure Node.js 在辅助角色中运行服务总线队列消息

c++ - 错误: undefined symbol: omp_init_lock only when compiling with node-gyp

node.js - 为什么在 Mac OSX El Capitan 上 node-gyp 重建失败

c++ - 如何使用 boost::program_options 提取环境变量?

c++ - 使用 ofstream 或 fstream 打开都不会出错,也不会打开文件

c++ - string x 和 int y 作为函数的参数- 不能在函数内部使用 if (x.length()<y) 吗?

c++ - 使用 boost.python 从 C++ 将变量导出到 python

node.js - Bitbucket Pipelines - 访问另一个容器

node.js - npm 安装期间 mac 10.5.8 上的 node-gyp 'pkg-config: command not found'