3D进阶之CloudCompare:使用脚本添加git子项目依赖(.gitmodules)并用VS2019编译

本文主要是介绍3D进阶之CloudCompare:使用脚本添加git子项目依赖(.gitmodules)并用VS2019编译,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

(一)如何添加子依赖项目

从github上下载下来的文件,例如,

https://github.com/CloudCompare/CloudCompare/archive/refs/tags/v2.12.0.tar.gz

里面明明是有一个在.gitmodules文件的,内容如下,

[submodule "plugins/core/IO/qE57IO/extern/libE57Format"]path = plugins/core/IO/qE57IO/extern/libE57Formaturl = https://github.com/asmaloney/libE57Format
[submodule "extern/CCCoreLib"]path = libs/qCC_db/extern/CCCoreLiburl = https://github.com/CloudCompare/CCCoreLib
[submodule "plugins/core/Standard/qPoissonRecon/extern/PoissonRecon"]path = plugins/core/Standard/qPoissonRecon/extern/PoissonReconurl = https://github.com/cloudcompare/PoissonRecon
[submodule "plugins/core/Standard/qMPlane"]path = plugins/core/Standard/qMPlaneurl = https://github.com/hvs-ait/mplane-plugin
[submodule "plugins/core/Standard/qColorimetricSegmenter"]path = plugins/core/Standard/qColorimetricSegmenterurl = https://gitlab.univ-nantes.fr/E164955Z/ptrans
[submodule "plugins/core/Standard/qMasonry"]path = plugins/core/Standard/qMasonryurl = https://github.com/CyberbuildLab/masonry-cc
[submodule "plugins/core/Standard/qJSonRPCPlugin"]path = plugins/core/Standard/qJSonRPCPluginurl = https://gitlab.com/theadib/JSonRPCPlugin.git
[submodule "plugins/core/Standard/qCanupo/contrib/dlib"]path = plugins/core/Standard/qCanupo/contrib/dliburl = https://github.com/davisking/dlib.git

可是,当你希望通过下面的指令克隆这些子项目依赖项时,会发现根本就没有反应【1】。

办法(1)当然你可以手动一个个去添加,不过这会非常麻烦。

办法(2)使用分支,

> git clone -b v2.12.0 --recursive https://github.com/CloudCompare/CloudCompare.git CC2120b

这里命名CC2120b是拷贝下来后重新命名的文件夹名称。

但这有个问题,有些项目是没有子分支的,或者,某些项目已经被删除了,git命令没办法找到github上的origin项目。

办法(3)使用脚本(具体可参考资料【1】)

假设你的项目解压后在CC2120b文件夹内,那就在这个文件夹内建一个脚本script.sh,然后在git bash中运行这些脚本就好了(使用命令:sh  script.sh),

如果需要逐个克隆并回复y:

#!/bin/bashset -e
rm -rf .git
git initgit config -f .gitmodules --get-regexp '^submodule\..*\.path$' > tempfilewhile read -u 3 path_key path
dourl_key=$(echo $path_key | sed 's/\.path/.url/')url=$(git config -f .gitmodules --get "$url_key")read -p "Are you sure you want to delete $path and re-initialize as a new submodule? " yncase $yn in[Yy]* ) rm -rf $path; git submodule add $url $path; echo "$path has been initialized";;[Nn]* ) exit;;* ) echo "Please answer yes or no.";;esacdone 3<tempfilerm tempfile

如果想一次性更新,就使用下面的脚本

#!/bin/shset -egit config -f .gitmodules --get-regexp '^submodule\..*\.path$' |while read path_key pathdoname=$(echo $path_key | sed 's/\submodule\.\(.*\)\.path/\1/')url_key=$(echo $path_key | sed 's/\.path/.url/')branch_key=$(echo $path_key | sed 's/\.path/.branch/')url=$(git config -f .gitmodules --get "$url_key")branch=$(git config -f .gitmodules --get "$branch_key" || echo "master")git submodule add -b $branch --name $name $url $path || continuedone

(二)编译cloudcompare

 不得不说cloudcompare在编译方面做得非常棒,我按默认的配置(如下图所示)整个过程中没有碰到任何错误,一气编译完成后,就可以愉快地使用cloudcompare了。

本文结束

参考资料:

【1】Restore git submodules from .gitmodules - Stack Overflow

这篇关于3D进阶之CloudCompare:使用脚本添加git子项目依赖(.gitmodules)并用VS2019编译的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/813432

相关文章

Java使用ANTLR4对Lua脚本语法校验详解

《Java使用ANTLR4对Lua脚本语法校验详解》ANTLR是一个强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件,下面就跟随小编一起看看Java如何使用ANTLR4对Lua脚本... 目录什么是ANTLR?第一个例子ANTLR4 的工作流程Lua脚本语法校验准备一个Lua Gramm

Java Optional的使用技巧与最佳实践

《JavaOptional的使用技巧与最佳实践》在Java中,Optional是用于优雅处理null的容器类,其核心目标是显式提醒开发者处理空值场景,避免NullPointerExce... 目录一、Optional 的核心用途二、使用技巧与最佳实践三、常见误区与反模式四、替代方案与扩展五、总结在 Java

使用Java将DOCX文档解析为Markdown文档的代码实现

《使用Java将DOCX文档解析为Markdown文档的代码实现》在现代文档处理中,Markdown(MD)因其简洁的语法和良好的可读性,逐渐成为开发者、技术写作者和内容创作者的首选格式,然而,许多文... 目录引言1. 工具和库介绍2. 安装依赖库3. 使用Apache POI解析DOCX文档4. 将解析

Qt中QUndoView控件的具体使用

《Qt中QUndoView控件的具体使用》QUndoView是Qt框架中用于可视化显示QUndoStack内容的控件,本文主要介绍了Qt中QUndoView控件的具体使用,具有一定的参考价值,感兴趣的... 目录引言一、QUndoView 的用途二、工作原理三、 如何与 QUnDOStack 配合使用四、自

C++使用printf语句实现进制转换的示例代码

《C++使用printf语句实现进制转换的示例代码》在C语言中,printf函数可以直接实现部分进制转换功能,通过格式说明符(formatspecifier)快速输出不同进制的数值,下面给大家分享C+... 目录一、printf 原生支持的进制转换1. 十进制、八进制、十六进制转换2. 显示进制前缀3. 指

Spring Boot循环依赖原理、解决方案与最佳实践(全解析)

《SpringBoot循环依赖原理、解决方案与最佳实践(全解析)》循环依赖指两个或多个Bean相互直接或间接引用,形成闭环依赖关系,:本文主要介绍SpringBoot循环依赖原理、解决方案与最... 目录一、循环依赖的本质与危害1.1 什么是循环依赖?1.2 核心危害二、Spring的三级缓存机制2.1 三

使用Python构建一个Hexo博客发布工具

《使用Python构建一个Hexo博客发布工具》虽然Hexo的命令行工具非常强大,但对于日常的博客撰写和发布过程,我总觉得缺少一个直观的图形界面来简化操作,下面我们就来看看如何使用Python构建一个... 目录引言Hexo博客系统简介设计需求技术选择代码实现主框架界面设计核心功能实现1. 发布文章2. 加

Python如何自动生成环境依赖包requirements

《Python如何自动生成环境依赖包requirements》:本文主要介绍Python如何自动生成环境依赖包requirements问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录生成当前 python 环境 安装的所有依赖包1、命令2、常见问题只生成当前 项目 的所有依赖包1、

shell编程之函数与数组的使用详解

《shell编程之函数与数组的使用详解》:本文主要介绍shell编程之函数与数组的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录shell函数函数的用法俩个数求和系统资源监控并报警函数函数变量的作用范围函数的参数递归函数shell数组获取数组的长度读取某下的

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t