window 下生成NodeJs(v8.9.3) 的 VS2015 解决方案node.sln
使用步骤 也可以参照 github:
https://github.com/nodejs/node/blob/master/BUILDING.md#windows-1
1. 从 github 同步
https://github.com/nodejs/node
2.安装 python 2.7 或者 2.6
https://www.python.org/downloads/
当然, 如果有Python 环境, 就跳过好了
3. 修改 common.gypi
因为如果 不修改的话, 会报好多错误的....
E:ProjectsC++ ode-git runk ools>gyp_node.py -Dtarget_arch=x64 -f msvs gyp: name 'node_shared' is not defined while evaluating condition 'node_shared=="true"' in E:ProjectsC++ ode-git runk ode.gyp E:ProjectsC++ ode-git runk ools>gyp_node.py -Dtarget_arch=x64 -f msvs gyp: name 'node_shared' is not defined while evaluating condition 'node_shared=="true"' in E:ProjectsC++ ode-git runk ode.gyp E:ProjectsC++ ode-git runk ools>gyp_node.py -Dtarget_arch=x64 -f msvs gyp: name 'node_use_openssl' is not defined while evaluating condition 'OS=="win" and node_use_openssl=="true" and node_shared_openssl=="false"' in E:ProjectsC++ ode-git runk ode.gyp E:ProjectsC++ ode-git runk ools>gyp_node.py -Dtarget_arch=x64 -f msvs gyp: name 'node_shared_openssl' is not defined while evaluating condition 'OS=="win" and node_use_openssl=="true" and node_shared_openssl=="false"' in E:ProjectsC++ ode-git runk ode.gyp E:ProjectsC++ ode-git runk ools>gyp_node.py -Dtarget_arch=x64 -f msvs gyp: name 'openssl_fips' is not defined while evaluating condition 'openssl_fips != ""' in E:ProjectsC++ ode-git runk ode.gyp E:ProjectsC++ ode-git runk ools>gyp_node.py -Dtarget_arch=x64 -f msvs gyp: name 'v8_enable_inspector' is not defined while evaluating condition 'v8_enable_inspector==1' in E:ProjectsC++ ode-git runk ode.gyp E:ProjectsC++ ode-git runk ools>gyp_node.py -Dtarget_arch=x64 -f msvs gyp: name 'node_enable_d8' is not defined while evaluating condition 'node_enable_d8=="true"' in E:ProjectsC++ ode-git runk ode.gyp E:ProjectsC++ ode-git runk ools>gyp_node.py -Dtarget_arch=x64 -f msvs gyp: name 'node_release_urlbase' is not defined while evaluating condition 'node_release_urlbase!=""' in E:ProjectsC++ ode-git runk ode.gyp E:ProjectsC++ ode-git runk ools>gyp_node.py -Dtarget_arch=x64 -f msvs gyp: name 'debug_http2' is not defined while evaluating condition 'debug_http2==1' in E:ProjectsC++ ode-git runk ode.gyp E:ProjectsC++ ode-git runk ools>gyp_node.py -Dtarget_arch=x64 -f msvs gyp: name 'v8_enable_i18n_support' is not defined while evaluating condition 'v8_enable_i18n_support==1' in E:ProjectsC++ ode-git runk ode.gyp
好多变量都没有定义.....
下面是修改的部分(红色粗体字,变量值是我自己的缺少设置,可以改), 文件在主目录下
{ 'variables': { 'asan%': 0, 'werror': '', # Turn off -Werror in V8 build. 'visibility%': 'hidden', # V8's visibility setting 'target_arch%': 'ia32', # set v8's target architecture 'host_arch%': 'ia32', # set v8's host architecture 'want_separate_host_toolset%': 0, # V8 should not build target and host 'library%': 'static_library', # allow override to 'shared_library' for DLL/.so builds 'component%': 'static_library', # NB. these names match with what V8 expects 'msvs_multi_core_compile': '0', # we do enable multicore compiles, but not using the V8 way 'python%': 'python', 'node_shared': 'false', 'node_enable_d8': 'false', 'v8_enable_inspector': 1, 'v8_enable_i18n_support': 'true', 'debug_http2': 1, 'debug_nghttp2': 1, 'node_use_openssl': 'false', 'node_shared_openssl': 'true', 'openssl_fips': '', 'node_release_urlbase': '', 'node_shared%': 'false', 'force_dynamic_crt%': 0, 'node_use_v8_platform%': 'true', 'node_use_bundled_v8%': 'true', 'node_module_version%': '', .....
4.修改 depsv8srcv8.gyp
貌似调用 depsv8srcv8.gyp 的时候, 有个参数没有传进去,target_arch的值我用的 是 'x64':
E:ProjectsC++ ode-git runk ools>gyp_node.py -Dtarget_arch=x64 -f msvs gyp: name 'debug_nghttp2' is not defined while evaluating condition 'debug_nghttp2 == 1' in E:ProjectsC++ ode-git runkdeps ghttp2 ghttp2.gyp gyp: Undefined variable target_arch in E:ProjectsC++ ode-git runkdepsv8srcv8.gyp
所以,手动加了这个变量
{ 'variables': { 'target_arch': 'x64', 'v8_code': 1, .....
5. 生成 解决方案
一般来说,使用 gyp 生成 VS 的解决方案的, 都是 使用类似的 命令行:
"gyp_XXXX.py -Dtarget_arch=x64 -f msvs" XXXX 就是工程/解决方案名,例如 V8的 就是 gyp_V8.gyp; Node的就是gyp_node.gyp
tools>gyp_node.py -Dtarget_arch=x64 -f msvs
Over!
6.如果 用 vcbuild.bat 生成, 就不会有这些错误
以上是直接 运行 gyp_node.py 会产生 缺少 变量, 但是 如果 用 vcbuild.bat, 就不会. >>git上有issue说明<< ^_^