GODOT 4 不用scons编译cpp扩展的方法

以terrain3d插件,Godot_v4.3 为例:
在这里插入图片描述

下载下来,先用scons编译一遍通过后,整个占用1GB,obj文件都生成在源码旁边,够乱。

scons 是跨平台的构建工具,但是需要需要写python脚本。流程比较莫名其妙,编译速度也慢,全量编译后,再次读取配置都需要8秒。

其实c++项目编译起来从来就不慢,慢是因为项目大,增量编译应该很快的。

godot插件代码很散装。godot_cpp目录是共用库,其中gen目录下的源码由python 脚本 Godot-cpp/binding_generator.py
生 成,不知道怎么生成的(为了跨平台),代码很多(13MB)。旁边src目录下面也有一小堆源码(0.5MB)。这是godot_cpp模块,所有插件应该是一样的。

/* THIS FILE IS GENERATED DO NOT EDIT */

然后有不止一个 include/godot_cpp 目录,简直了。terrain3d默认项目采用scons编译,但是是用visual studio驱动的,然而这里 visual 打了折扣,需要手动查看 vcxproj 项目文件,然后godot_cpp里的python脚本,结合才能理解具体编译过程。

godot_cpp tools py脚本根据平台环境,配置使用msvc或者mingw编译:godot-cpp/tools/windows.py

在这里插入图片描述
其中三行 env.append 语句。第一句定义预编译定义。第二句 cpp 编译选项,指定字符集。第三句链接选项,将警告视为错误。都可在 visual studio 的项目设置界面找到对应的开关。

最终 visual studio 项目配置如下:
在这里插入图片描述
三堆源码。common 对应 godot_cpp 里的 gen 和 src,vs立新建filter后,将文件夹拖对应filter即可。

记得配置生成目标类型(dll or lib),c++语言标准选 c++ 17:
在这里插入图片描述

下面也一样,是terrain3d插件的业务逻辑,代码其实不多:

在这里插入图片描述
设置好预定义,包含路径,就能编译插件本体。

预定义:WINDOWS_ENABLED;TYPED_METHOD_BIND;NOMINMAX;NDEBUG;_CONSOLE;

头文件包含路径:R:\cache\Terrain3D\src;R:\cache\Terrain3D\godot-cpp\gdextension;R:\cache\Terrain3D\godot-cpp\gen\include;R:\cache\Terrain3D\godot-cpp\include;%(AdditionalIncludeDirectories)

可以链接scons编译的godot_cpp静态库,需要静态链接(MT方式)。

也可以自行编译 godot_common,然后随便怎么链接。

  • 记得关闭编译大量的类型转换warning。#pragma warning(disable:4244) 或者属性 -> c++ -> 高级 -> 在这里插入图片描述
    并开启多线程编译。加快编译速度。

编译速度:godot_common :半小时

编译速度:terrain3d 全量30秒。

全量编译太慢。难道是大量hpp文件拖慢了编译速度?而且大小也不一样。obj大了几倍,一百行的cpp文件竟然生成几MB的.obj!

调查一番发现:

  1. godot_common项目忘记开启多线程/MP。
  2. c++选项 /Zc:inline可显著降低obj大小,参考 /Zc:inline (Remove unreferenced COMDAT) | Microsoft Learn

追加 Zc:inline 选项,大小终于和 scons 编译的一致。编译速度也加快了不少。

最终 编译速度:

godot_common :11分钟

terrain3d 全量30秒。增量5~6秒

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/466100.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python 学习完基础语法知识后,如何进一步提高?

入门Python后,就可以拿些小案例练手了,这时候千万不要傻乎乎地成天啃语法书。 编程是一门实践的手艺,讲究孰能生巧。不管是去手撸算法、或者照葫芦画瓢写几个小游戏都可以让你的Python突飞猛进。 之前看github比较多,推荐给大家…

基于Java的简单图书管理系统的实现(增删改查)

基于Java的简单图书管理系统的实现(增删改查) package com.situ.lib;public class Book {//对象:书-----定义书的属性:private String name;private String isbn;private String author;private double price;//无参构造方法:pub…

C语言必做30道练习题

C语言练习30题(分支循环,数组,函数,递归,操作符) 目录 分支循环1.闰年的判断2.阅读代码,计算代码输出的结果3.输入一个1~7的数字,打印对应的星期几4.输入任意一个整数值,…

tp接口 入口文件 500 错误原因

一、描述 二、可能的原因 1、runtime目录没权限 2、关闭了Tp记录日志的功能 3、关闭debug调试模式 4、关闭了debug模式还是报错 一、描述 Thinkphp项目本地正常,上传到线上后静态文件访问正常,访问tp接口报500错误。 经调试发现,在php入…

思源笔记轻松连接本地Ollama大语言模型,开启AI写作新体验!

文章目录 前言1. 下载运行Ollama框架2. Ollama下载大语言模型3. 思源笔记设置连接Ollama4. 测试笔记智能辅助写作5. 安装Cpolar工具6. 配置Ollama公网地址7. 笔记设置远程连接Ollama8. 固定Ollama公网地址 前言 今天我们要聊聊如何通过cpolar内网穿透技术,把国产笔…

CAS 详解

Java 中 CAS 是如何实现的? 在 Java 中,实现 CAS(Compare-And-Swap, 比较并交换)操作的一个关键类是Unsafe。 Unsafe类位于sun.misc包下,是一个提供低级别、不安全操作的类。由于其强大的功能和潜在的危险性&#xf…

九识智能与徐工汽车达成战略合作,共绘商用车未来新蓝图

近日,九识智能与徐工汽车签署战略合作协议,标志着双方在智能驾驶技术与新能源商用车融合应用、联合生产及市场推广等方面迈入深度合作的新篇章,将共同引领智能驾驶技术商业化浪潮。 近年来,在国家智能化发展战略的引领下&#xff…

【vue2.7.16系列】手把手教你搭建后台系统__登录使用状态管理(15)

使用store进行登录信息管理 其实就是把登录放到vuex的actions中去执行,然后保存用户信息、权限等 在store/modules/account.js中添加如下代码: import { login, logout, getInfo, menusApi } from /api/account; // getExpiresTime import {getToken,s…

sql报错信息将字符串转换为 uniqueidentifier 时失败

报错信息: [42000] [Microsoft][SQL Server Native Client 10.0][SQL Server]将字符串转换为 uniqueidentifier 时失败 出错行如下: 表A.SourceCode 表B.ID 出错原因: SourceCode是nvarchar,但ID是uniqueidentifier 数据库查询字段和类…

「Mac畅玩鸿蒙与硬件22」鸿蒙UI组件篇12 - Canvas 组件的动态进阶应用

在鸿蒙应用中,Canvas 组件可以实现丰富的动态效果,适合用于动画和实时更新的场景。本篇将介绍如何在 Canvas 中实现动画循环、动态进度条、旋转和缩放动画,以及性能优化策略。 关键词 Canvas 组件动态绘制动画效果动态进度条旋转和缩放性能优…

Python练习10

Python日常练习 题目: 编写程序,输出如下所示图案。 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 要求: 使用for循环的方式完成 --------------------------------------------------------- 注意: …

【前端】html的8个常用标签

HTML html 超文本链接(标记)语言 H5 HTML v5 get/post/delete/put —— restful 网络规划 Web开发 结构样式动作 架构 装饰 交互(动作) 装饰做好了–> UI工程师 标签 文本相关 图片、图像、声音 导航 表格* 列表 表单标签* 布局标签 H5…

Java高效学习家教平台系统小程序源码

📚 家教平台系统:让孩子学习更高效的秘密武器 🚀 👩‍🏫 引言:家教新风尚,线上平台引领教育潮流 在这个信息爆炸的时代,家教平台系统如同雨后春笋般涌现,为孩子们的学习…

Qt多边形填充/不填充绘制

1 填充多边形绘制形式 void GraphicsPolygonItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) {Q_UNUSED(option);Q_UNUSED(widget);//painter->setPen(pen()); // 设置默认画笔//painter->setBrush(brush()); // 设置默…

OpenAI大事记;GPT到ChatGPT参数量进化

目录 OpenAI大事记 GPT到ChatGPT参数量进化 OpenAI大事记 GPT到ChatGPT参数量进化 ChatGPT是从初代 GPT逐渐演变而来的。在进化的过程中,GPT系列模型的参数数量呈指数级增长,从初代GPT的1.17亿个参数,到GPT-2的15 亿个参数,再到 GPT-3的1750 亿个参数。模型越来越大,训练…

一文了解Java序列化

Java 序列化(Serialization)是将对象的状态转换为字节流,以便将对象的状态保存到文件中或通过网络传输的过程。反序列化(Deserialization)则是将字节流恢复为原始对象。Java 序列化主要通过 Serializable 接口实现。 为…

vue解决跨域问题

1、在vue项目的根目录创建vue.config.js的文件 复制以下带代码 devServer: {proxy: {/api: {target: http://localhost:3000, // 目标服务器地址changeOrigin: true, // 是否改变源pathRewrite: {^/api: // 重写路径,例如将/api/user重写为/user}}}}2、将接口的地…

是时候用开源降低AI落地门槛了

过去三十多年,从Linux到KVM,从OpenStack到Kubernetes,IT领域众多关键技术都来自开源。开源技术不仅大幅降低了IT成本,也降低了企业技术创新的门槛。 那么,在生成式AI时代,开源能够为AI带来什么?…

基于SSM+VUE守护萌宠宠物网站JAVA|VUE|Springboot计算机毕业设计源代码+数据库+LW文档+开题报告+答辩稿+部署教+代码讲解

源代码数据库LW文档(1万字以上)开题报告答辩稿 部署教程代码讲解代码时间修改教程 一、开发工具、运行环境、开发技术 开发工具 1、操作系统:Window操作系统 2、开发工具:IntelliJ IDEA或者Eclipse 3、数据库存储&#xff1a…

Oh My Posh安装

nullSet up your terminalhttps://ohmyposh.dev/docs/installation/windows Git ee oh-my-posh: Windows上的oh-my-zsh,源地址 https://github.com/JanDeDobbeleer/oh-my-posh.git (gitee.com)https://gitee.com/efluent/oh-my-posh