Godot-StartUP

创建于:2018-07-28

创建人: Justus

44 信息 154 成员
讨论基于Godot以及Unity引擎的游戏开发经验,理论和最佳实践。共享一些通用思路以启发另一种生产工具中的实践。独立开发群QQ: 122017359

编译godot 的GDNative 库

imdjs 2018-11-10

如果没有安装python就先安装python,再安装scons.

设置系统环境变量PATH. 增加E:\Python\Scripts 路径 (因为scons安装后在这个目录里).

Image title


(1):如果你想在scons里指定INCLUDE与LIB 自定义路径,可以通过修改scons源码实现,找到E:\Python\Lib\site-packages\scons-3.0.0\SCons\Script\Main.py, 在def main(): 函数的开头里增加以下代码.

LIBS=['user32','kernel32','uuid','ws2_32','winmm','ole32'];

LIBPATH=['E:/Microsoft Visual Studio 12.0/VC/Tools/MSVC/lib/x64','E:/Microsoft Visual Studio 12.0/VC/Windows Kits/7.1A/Lib/x64'];

CCFLAGS = ' /D "UNICODE" /D "WIN32" /D "_UNICODE" ';

SCons.Defaults.DefaultEnvironment(LIBS=LIBS,LIBPATH=LIBPATH,CCFLAGS=CCFLAGS);

(这是自定义path路径,就是你vc12里的cl.exe路径)

(2):然后在E:\Python\Lib\site-packages\scons-3.0.0\SCons\Platform\win32.py 的def generate(env): 函数

把env.AppendENVPath('PATH', get_system_root() + '\System32') 注释掉替换以下代码:

myvs_home="E:\\Microsoft Visual Studio 12.0"

garfield_path1=myvs_home+"\\VC\\Tools\\MSVC\\bin\\HostX64\\x64"

garfield_path2=myvs_home+"\\Common7\\IDE"

garfield_path3=myvs_home+"\\Common7\\Tools"

garfield_path_string=garfield_path1+';'+garfield_path2+';'+garfield_path3

env.AppendENVPath('PATH', garfield_path_string);#SCons\Environment.py

env.Append(CPPPATH=[ 'E:/Microsoft Visual Studio 12.0/VC/Tools/MSVC/include']);

(这是增加自定义的include路径)

以上两种增加自定义路径的方法是以修改scons源码实现的,这样 可以不用每个项目都改路径.
如果你不想修改源码,也可以在你项目的SConstruct 文件里修改自定义路径与包含目录.

(3):跟着就是编译gdnative库,假设你已经下载好ndnative库(分别下载:https://github.com/GodotNativeTools/godot_headers https://github.com/GodotNativeTools/godot-cpp),解压为GDNative文件夹.

Image title


打开GDNative的源码目录,在空白处按shift 加右键 选择在此处打开Powershell窗口,弹出命令窗口,写入scons p=windows tagert="release"  regenerate_bindings=yes VERBOSE=1 命令开始编译如下gif.

Image title

我上面是编译成debug版本,不过我发现编译成debug版本不能在godot里正常导入dll,不知什么原因,只有我编译成release版本才解决问题.
要编译成release版本我直接修改 gdnative下的SConstruct 文件 注释一行,增加一行:
#opts.Add(EnumVariable('target', 'Compilation target', 'debug', ('debug', 'release')));#■■--
opts.Add(EnumVariable('target', 'Compilation target', 'release', ('debug', 'release')));#■■++


(转发自:原日志地址
 

加入 indienova

  • 建立个人/工作室档案
  • 建立开发中的游戏档案
  • 关注个人/工作室动态
  • 寻找合作伙伴共同开发
  • 寻求线上发行
  • 更多服务……
登录/注册