为节点gyp添加include dir

时间:2015-02-04 23:19:31

标签: node.js gcc npm node-gyp gyp

我正在将一个node-js应用程序部署到heroku,需要使用npm包imagemagic-native

我制作了buildpack install libmagick++-dev并导出了包含路径:

export INCLUDE_PATH="$BUILD_DIR/.apt/usr/include:$INCLUDE_PATH"
export CPATH="$INCLUDE_PATH"
export CPPPATH="$INCLUDE_PATH"

在使用imagemagic-native安装npm install包时,会调用node-gyp来编译它的二进制文件。但是我收到了这个错误:

remote:        > imagemagick-native@1.7.0 install /tmp/build_720834c3a32b65d69ae603d7c618e20f/node_modules/imagemagick-native
remote:        > node-gyp rebuild
remote:        
remote:        make: Entering directory `/tmp/build_720834c3a32b65d69ae603d7c618e20f/node_modules/imagemagick-native/build'
remote:          CXX(target) Release/obj.target/imagemagick/src/imagemagick.o
remote:        In file included from ../src/imagemagick.cc:9:
remote:        ../src/imagemagick.h:1:22: warning: Magick++.h: No such file or directory

这表明gcc没有看到libmagick++的标头文件,因为$CCPATH不可用。

如何让npm install添加node-gyp使用的include_dirs列表的路径?

有关我的用例的更多详细信息,请访问:Using Magick++ in a node.js application on heroku

3 个答案:

答案 0 :(得分:4)

尝试:

将环境变量CXX = / path /设置为/ g ++ -Ipath / to / include

然后重新启动该过程。如果您正在使用bash,则可以通过

完成
export CXX="/path/to/g++ -Ipath/to/include"

/ path / to / include是缺少标题Magick ++。h所在的位置

如果不起作用,您可以手动设置CXX以在-file / build_720834c3a32b65d69ae603d7c618e20f / node_modules / imagemagick-native / build的makefile中包含-I,然后调入该目录并调用make。

答案 1 :(得分:4)

我花了一些时间试图回答同样的问题。最后,我找到了正确的方法here。您需要在'include_dirs'中设置~/.node-gyp/x.x.x/common.gypi属性。 这就是我将Mac OS上的include目录设置为/opt/local/include/(这是所有macports intalls去的地方):

...
['OS=="mac"', {
  'defines': ['_DARWIN_USE_64_BIT_INODE=1'],
  'include_dirs': ['/opt/local/include'],
  'xcode_settings': {
    'ALWAYS_SEARCH_USER_PATHS': 'NO',
...

虽然我不确定它是否适用于heroku环境。

答案 2 :(得分:1)

您还可以在项目binding.gyp文件中使用“include_dirs”选项。详细了解format description page上的可用选项。