“深入浅出”系列之QT:(6)如何在一个项目中调用另一个项目
在Qt中,如果想在一个项目中调用另一个项目,这通常意味着想要在一个CMake构建的项目中集成或依赖另一个CMake构建的项目。
1.子模块或子目录方式:
如果另一个项目可以作为一个子模块或子目录包含在当前项目中,可以使用add_subdirectory
命令在CMake中添加它。这样,子项目的CMake配置将作为父项目配置的一部分被处理。
# 在主CMakeLists.txt中
add_subdirectory(path/to/your/subproject)
确保子项目有自己的CMakeLists.txt
文件,并且其构建系统是与主项目兼容的。
2.外部项目方式(使用ExternalProject):
如果子项目是一个独立的外部项目,并且你不想或不能将其源代码直接包含在你的主项目中,你可以使用CMake的ExternalProject模块来下载、配置和构建外部项目。
# 首先,你可能需要包含ExternalProject模块
include(ExternalProject)
# 然后,定义外部项目
ExternalProject_Add( external_project_name
DOWNLOAD_DIR ${CMAKE_BINARY_DIR}/external/project_name
SOURCE_DIR ${CMAKE_BINARY_DIR}/external/project_name/src
BINARY_DIR ${CMAKE_BINARY_DIR}/external/project_name/build
CONFIGURE_COMMAND <configure_command>
BUILD_COMMAND <build_command>
INSTALL_COMMAND <install_command>
# ... 其他选项 )
这种方法允许你控制外部项目的下载、配置、构建和安装过程。
3.静态或动态链接库方式:
如果另一个项目已经编译成了一个静态库(.a
文件)或动态库(.so
、.dll
文件),你可以在你的主项目中链接这个库。你需要在CMake中指定库的路径和要链接的库文件。
# 指定库的路径 link_directories(/path/to/your/library)
# 链接库 target_link_libraries(your_target_name your_library_name)
确保库文件的路径在LD_LIBRARY_PATH
环境变量中(对于Linux和macOS),或者在系统的动态链接库搜索路径中(对于Windows)。
4.使用Qt的qmake构建系统时的特殊处理:
如果你的主项目是使用Qt的qmake构建的,而不是CMake,那么你需要将另一个CMake项目的构建结果(如库文件)集成到qmake项目中。这通常涉及到在qmake的项目文件(.pro
文件)中指定库文件的路径和名称。
# 在.pro文件中 LIBS += -L/path/to/your/library -lyour_library_name
对于CMake构建的子项目,你可能需要先单独构建它,然后将生成的库文件和其他必要的文件复制到主项目可以访问的位置。
在Qt和CMake的上下文中,最常见和推荐的方法是使用子目录方式(如果子项目可以很容易地包含在主项目中)或静态/动态链接库方式(如果子项目已经编译成了库)。这些方法提供了较好的集成度和灵活性。如果你选择使用ExternalProject方式,请注意它可能会增加构建的复杂性和时间,因为外部项目会在每次构建主项目时被下载和构建(除非你已经缓存了构建结果)。
要把一个项目编译成一个静态库(.a
文件)或动态库(.so
、.dll
文件),需要按照以下步骤:
1. 编写源代码
首先,确保项目源代码是组织良好的,并且有一个清晰的构建系统(如 CMake 或 Makefile)。
2. 配置构建系统
使用 CMake
如果使用了 CMake,在 CMakeLists.txt
文件中指定要生成的库类型。以下是一个简单的例子:
project(MyLibrary)# 设置项目名称
set(CMAKE_CXX_STANDARD 11) # 指定 C++ 标准
set(SOURCE_FILES src/file1.cpp src/file2.cpp)# 添加源文件
add_library(MyStaticLib STATIC ${SOURCE_FILES})# 添加一个静态库目标
# 或者添加一个动态库目标
# add_library(MyDynamicLib SHARED ${SOURCE_FILES})
在这个例子中,MyStaticLib
是静态库的目标名称,而 MyDynamicLib
是动态库的目标名称(注释掉了,因为通常只会选择其中一个)。${SOURCE_FILES}
包含了要编译的源文件列表。
使用 Makefile
如果使用 Makefile,需要编写规则来编译源文件并生成库文件。以下是一个简单的 Makefile 片段,用于生成静态库:
# 编译器和编译器标志
CXX = g++ CXXFLAGS = -std=c++11
# 源文件和对象文件
SRCS = src/file1.cpp src/file2.cpp OBJS = $(SRCS:.cpp=.o)
# 库文件名称
TARGET = libMyStaticLib.a
# 编译规则
all: $(TARGET) $(TARGET): $(OBJS) @echo "Creating static library $(TARGET)..." @ar rcs $(TARGET) $(OBJS) %.o: %.cpp @echo "Compiling $<..." @$(CXX) $(CXXFLAGS) -c $< -o $@
# 清理规则 clean: @echo "Cleaning up..." @rm -f $(OBJS) $(TARGET)
对于动态库,你需要将 TARGET
变量改为 libMyDynamicLib.so
(Linux)或相应的 .dll
名称(Windows),并调整编译和链接规则以生成动态库。
3. 编译库
使用 CMake
在项目的根目录下运行以下命令:
mkdir build
cd build
cmake ..
make
这将创建一个 build
目录,并在其中生成静态库或动态库文件。
使用 Makefile
在项目的根目录下运行 make
命令:
make
这将根据 Makefile 中的规则编译源文件并生成库文件。
4. 使用库
一旦库文件生成,你可以在其他项目中使用它。对于静态库,你需要在编译时指定库文件的路径和名称,并使用 -L
(指定库目录)和 -l
(指定库名称,不包括前缀 lib
和文件扩展名)选项。对于动态库,你还需要确保库文件在运行时是可访问的,通常是通过设置 LD_LIBRARY_PATH
环境变量(Linux)或将库文件放在系统的动态链接库搜索路径中(Windows)。
注意事项
- 确保你的源代码中没有
main
函数,因为库不应该包含入口点。 - 对于动态库,你可能还需要处理平台特定的细节,比如导出符号(在 Windows 上使用
__declspec(dllexport)
)和导入符号(在 Windows 上使用__declspec(dllimport)
)。 - 在编写和使用库时,考虑库的 API 设计和文档,以便其他开发者能够轻松地使用你的库。
扩展:
1.动态链接库和静态链接库有什么区别
动态链接库(Dynamic Link Library, DLL)和静态链接库(Static Link Library)在程序编译和运行时的行为上有着显著的区别。以下是它们的主要区别:
-
链接时机:
- 动态链接库:在程序运行时被加载和链接。这意味着程序在编译时并不包含这些库的代码,而是在运行时从外部文件中加载。
- 静态链接库:在程序编译时就被完全集成到程序中。库代码在编译时就被复制到最终的可执行文件中。
-
文件大小和内存占用:
- 动态链接库:使用动态链接库的程序通常具有更小的文件大小,因为库代码不包含在可执行文件中。但如果多个程序使用相同的库,这些程序可以共享内存中的同一份库副本,从而减少总体内存占用。
- 静态链接库:会增加最终可执行文件的大小,因为每一个使用该库的程序都包含了一份完整的库代码副本。这可能导致更高的磁盘空间和内存占用,尤其是在多个程序使用相同库的情况下。
-
部署和更新:
- 动态链接库:使得部署和更新变得更加简单。当库需要更新时,只需替换掉系统中的DLL文件,而不需要重新编译使用该库的每个程序。
- 静态链接库:中的代码更新需要重新编译所有使用该库的程序。
-
兼容性和依赖问题:
- 动态链接库:可能导致所谓的“DLL地狱”,即版本冲突和缺失问题,因为不同的程序可能依赖于同一DLL的不同版本。
- 静态链接库:由于是编译到程序中的,不会有版本冲突的问题,但这也意味着更新库版本需要重新编译程序。
-
平台和语言限制:
- 动态链接库:在不同的操作系统平台(如Windows的DLL和Linux的SO文件)和不同的编程语言间可能存在兼容性问题。
- 静态链接库:通常与特定的编译器和平台紧密相关,可能在跨平台时遇到限制。
-
使用场景:
- 动态链接库:更适用于需要频繁更新或者多个程序共享代码的情况。
- 静态链接库:更适用于小型、独立的应用程序,或者对性能有特别要求的场合。
总的来说,动态链接库和静态链接库各有优劣,选择使用哪一种通常取决于应用程序的特定需求和部署环境。
相关文章:
“深入浅出”系列之QT:(6)如何在一个项目中调用另一个项目
在Qt中,如果想在一个项目中调用另一个项目,这通常意味着想要在一个CMake构建的项目中集成或依赖另一个CMake构建的项目。 1.子模块或子目录方式: 如果另一个项目可以作为一个子模块或子目录包含在当前项目中,可以使用add_sub…...
计算机网络—地址与子网(IPv4)相关知识总结
前言 为了更加清楚的了解该相关知识,下面是发现的一些宝藏博主的博客。 彻底搞懂网络地址、广播地址、主机地址、网关、子网掩码、网络号、主机号 - lipga - 博客园 IP地址(分类)、子网掩码、网络号、主机号、子网号_网络号,主机号,子网号…...
计算机网络 (36)TCP可靠传输的实现
前言 TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP通过多种机制实现可靠传输,这些机制主要包括连接管理、序列号和确认应答机制、重传机制、流量控制、拥塞控制等。 一、连接管理 TCP使用三次握手࿰…...
SQL从入门到实战-2
高级语句 窗口函数 排序窗口函数 例题二十九 select yr,party,votes, rank() over (PARTITION BY yr ORDER BY votes desc) as pson from ge where constituency S14000021 order by party,yr 偏移分析函数 例题三十 select name,date_format(whn,%Y-%m-%d) data, confi…...
基于python的网页表格数据下载--转excel
基于 Python 的网页表格数据爬取与下载:以维基百科为例 目录 基于 Python 的网页表格数据爬取与下载:以维基百科为例1. 背景介绍2. 工具与环境3. 操作步骤1. 获取网页内容2. 定位表格元素3. 表格变身 Pandas DataFrame4. 检查数据,收工!5. 进阶玩法与优化6. 完整代码4. 结果…...
用户界面的UML建模13
􀂄 Concrete Presentation Model 包中所包含的是,在Environment 包中与表示层框架模式中的《apm》类相对应的那些类。 8 结论 本文使用了一个图书馆系统的案例,来论述了关于用户界面的建模。通过使用统一建模语言来对应用系统进行建模&…...
[Python学习日记-75] 计算机基础与网络
[Python学习日记-75] 计算机基础与网络 简介 计算机基础 什么是网络编程 计算机网络 简介 本篇主要介绍的计算机基础是浓缩的,这是因为我们主要学习的是 Python,而 Python 主要是为了开发应用程序的,并不会用它来开发操作系统和嵌入式程序…...
【机器学习:六、特征工程】
1. 特征工程背景意义 在机器学习中,特征工程是模型成功的关键之一。无论算法多么先进,其性能都很大程度上依赖于输入数据的质量。特征工程是指对原始数据进行处理,以创建更适合算法的特征的过程。这一过程在以下方面具有重要意义:…...
webpack打包要义
webpack基本 Webpack 是一个现代 JavaScript 应用程序的静态模块打包工具。它的工作原理可以概括为以下几个核心步骤: 1. 入口起点(Entry) Webpack 从配置文件中指定的入口文件(Entry Point)开始,分析应用…...
Mybatis——Mybatis开发经验总结
摘要 本文主要介绍了MyBatis框架的设计与通用性,阐述了其作为Java持久化框架的亮点,包括精良的架构设计、丰富的扩展点以及易用性和可靠性。同时,对比了常见持久层框架,分析了MyBatis在关系型数据库交互中的优势。此外࿰…...
013:深度学习之神经网络
本文为合集收录,欢迎查看合集/专栏链接进行全部合集的系统学习。 合集完整版请参考这里。 深度学习是机器学习中重要的一个学科分支,它的特点就在于需要构建多层且“深度”的神经网络。 人们在探索人工智能初期,就曾设想构建一个用数学方式…...
Java 模板变量替换——字符串替换器(思路Mybatis的GenericTokenParser)
Java 模板变量替换——字符串替换器(思路Mybatis的GenericTokenParser) 思路字符串替换器 思路 模板变量替换无非是寻找出字符串(模板)中的特殊标记,用对应的变量进行字符串替换。 提到变量替换,大家第一能…...
蓝桥杯备考:数据结构之栈 和 stack
目录 栈的概念以及栈的实现 STL 的stack 栈和stack的算法题 栈的模板题 栈的算法题之有效的括号 验证栈序列 后缀表达式 括号匹配 栈的概念以及栈的实现 栈是一种只允许在一端进行插入和删除的线性表 空栈:没有任何元素 入栈:插入元素消息 出…...
Lambda离线实时分治架构深度解析与实战
一、引言 在大数据技术日新月异的今天,Lambda架构作为一种经典的数据处理模型,在应对大规模数据应用方面展现出了强大的能力。它整合了离线批处理和实时流处理,为需要同时处理批量和实时数据的应用场景提供了成熟的解决方案。本文将对Lambda…...
Vue.js组件开发,AI时代的前端新玩法
AI可不只是写写小说、聊聊天,现在它的触角已经伸到了程序员的代码世界里。特别是前端开发,很多人都在尝试用ChatGPT或者类似的AI工具来写代码,甚至直接生成Vue.js组件。有些人感叹,"写代码的时代是不是要结束了?&…...
标定 3
标定场景与对应的方式 标定板标定主要应用场景: (1)无法获取到执行机构物理坐标值,比如相机固定,执行机构为传送带等 (2)相机存在畸变等非线性标定情况,需要进行畸变校正 (3)标定单像素精度 (4)获取两个相机之间的坐标系关系 标定板操作步骤: (1)确定好拍…...
电商项目-基于ElasticSearch实现商品搜索功能(三)
本系列文章主要介绍基于 Spring Data Elasticsearch 实现商品搜索的后端代码,介绍代码逻辑和代码实现。 主要实现功能:根据搜索关键字查询、条件筛选、规格过滤、价格区间搜索、搜索查询分页、搜索查询排序、高亮查询。 主要应用技术:canal,…...
【51单片机】03 蜂鸣器-播放音乐
蜂鸣器-播放音乐 一、原理介绍1.硬件电路 二、练习1.让蜂鸣器发声2.尝试演奏小星星 一、原理介绍 蜂鸣器分为有源蜂鸣器、无源蜂鸣器两种。 有源蜂鸣器:施加合适的电压之后就会发出特定频率的声音 无源蜂鸣器:需要提供特定频率的声音信号,才能…...
MySQL 架构
MySQL架构 MySQL8.0服务器是由连接池、服务管理⼯具和公共组件、NoSQL接⼝、SQL接⼝、解析器、优化 器、缓存、存储引擎、⽂件系统组成。MySQL还为各种编程语⾔提供了⼀套⽤于外部程序访问服务器的连接器。整体架构图如下所⽰: MySQL Connectors:为使⽤…...
XML 解析器:深入解析与高效应用
XML 解析器:深入解析与高效应用 引言 XML(可扩展标记语言)作为一种重要的数据交换格式,被广泛应用于各种系统和平台中。为了有效地处理和解析XML数据,XML解析器发挥着至关重要的作用。本文将深入探讨XML解析器的原理…...
LabVIEW设计 IIR 滤波器
这是一个设计 IIR 滤波器的 LabVIEW 程序框图,其功能主要是用于设计滤波器并计算其频率响应,但它并不直接对输入的波形进行实时滤波,而是提供一个滤波器的频率响应分析工具。 以下是框图中各部分的详细解释: 1. 主要模块功能说明 …...
基于改进粒子群优化的无人机最优能耗路径规划
目录 1. Introduction2. Preliminaries2.1. Particle Swarm Optimization Algorithm2.2. Deep Deterministic Policy Gradient2.3. Calculation of the Total Output Power of the Quadcopter Battery 3.OptimalEnergyConsumptionPathPlanningBasedonPSO-DDPG3.1.ProblemModell…...
AI刷题-数列推进计算任务、数组中的幸运数问题
目录 一、数列推进计算任务 问题描述 测试样例 解题思路: 问题理解 数据结构选择 算法步骤 优化思路 最终代码: 运行结果: 二、数组中的幸运数问题 问题描述 测试样例 解题思路: 问题理解 数据结构选择 算法步…...
微服务的配置共享
1.什么是微服务的配置共享 微服务架构中,配置共享是一个重要环节,它有助于提升服务间的协同效率和数据一致性。以下是对微服务配置共享的详细阐述: 1.1.配置共享的概念 配置共享是指在微服务架构中,将某些通用或全局的配置信息…...
【计算机网络】窥探计网全貌:说说计算机网络体系结构?
标签难度考察频率综合题⭐⭐⭐60% 这个问题在计算机网络知识体系中是一个比较重要的问题,只有完整地了解计算机网络的体系结构才能清晰地认识网络的运行原理。 在回答这个问题时,笔者认为有几个比较重要的点: 首先一定要分清楚前置条件&am…...
【MySQL】DATEDIFF()函数使用
DATEDIFF 函数用于计算两个日期之间的差值,以天为单位 DATEDIFF 函数返回一个整数,表示 date1 和 date2 之间的天数。如果 date1 在 date2 之前,结果为负数;如果在 date2 之后,结果为正数;如果相等…...
计算机网络学习笔记
第1课 绪论、传输介质 【知识点回顾】 两种导线可以减小电磁干扰: 双绞线(分为非屏蔽双绞线、屏蔽双绞线)(RJ-45用)同轴电缆(短距离使用)网络通信的基本单位:位(bit&…...
Spring Boot性能提升的核武器,速度提升500%!
虚拟线程是 Java 21 引入的一个新特性,用于简化并发编程。它与传统的操作系统线程相比,具有显著的优势: 轻量级:虚拟线程由 JVM 管理,而非操作系统,因此它们的内存占用和创建成本远低于传统线程。理论上&am…...
zig 安装,Hello World 示例
1. 安装 Zig 首先,你需要在你的计算机上安装 Zig 编译器。你可以从 Zig 官方网站 下载适合你操作系统的版本。 安装完成后,你可以在终端中运行以下命令来检查 Zig 是否安装成功: zig version如果一切正常,它会显示 Zig 的版本信…...
【数据库系统概论】第5章 数据库完整性【!触发器】
目录 5.1数据库完整性概述 5.2 实体完整性 5.3 参照完整性 5.4 用户定义的完整性 属性上的约束 1. 列值非空(NOT NULL) 2. 列值唯一(UNIQUE) 3. 检查列值是否满足条件(CHECK) 元组上的约束 5.5 完…...
Linux中通过frp实现内网穿透
1、准备工作 准备一台公网服务器(云服务器),推荐阿里云或者腾讯云都可以 需要下载好frp安装包Linux端的和Windows端的安装包 网址:Releases fatedier/frp (github.com)https://github.com/fatedier/frp/releases 2、下载frp_0…...
Vscode辅助编码AI神器continue插件
案例效果 1、安装或者更新vscode 有些版本的vscode不支持continue,最好更新到最新版,也可以直接官网下载 https://code.visualstudio.com/Download 2、安装continue插件 搜索continue,还未安装的,右下脚有个Install,点击安装即可 <...
上海亚商投顾:沪指探底回升微涨 机器人概念股午后爆发
上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 市场全天探底回升,沪指盘中跌超1.6%,创业板指一度跌逾3%,午后集体拉升翻红…...
LeetCode 3297.统计重新排列后包含另一个字符串的子字符串数目 I:滑动窗口
【LetMeFly】3297.统计重新排列后包含另一个字符串的子字符串数目 I:滑动窗口 力扣题目链接:https://leetcode.cn/problems/count-substrings-that-can-be-rearranged-to-contain-a-string-i/ 给你两个字符串 word1 和 word2 。 如果一个字符串 x 重新…...
ssm旅游攻略网站设计+jsp
系统包含:源码论文 所用技术:SpringBootVueSSMMybatisMysql 需要源码或者定制看文章最下面或看我的主页 目 录 目 录 III 1 绪论 1 1.1 研究背景 1 1.2 目的和意义 1 1.3 论文结构安排 2 2 相关技术 3 2.1 SSM框架介绍 3 2.2 B/S结构介绍 3 …...
前端学习-环境this对象以及回调函数(二十七)
目录 前言 目标 环境对象 作用 环境对象this是什么? 判断this指向的粗略规则是什么? 回调函数 目标 常见的使用场景 综合案例:Tab任务栏切换 总结 前言 男儿何不带吴钩,收取关山五十州 目标 能够分析判断函数运行在不…...
计算机网络-数据链路层(虚拟局域网VLAN)
2.6 虚拟局域 2.6.1 虚拟局域网概述 以太网交换机连接的各个网络同属于一个广播域,随着以太网的规模扩大,广播域也会相应的扩大,巨大的广播域会带来巨大的弊端。 广播风暴 难以治理 潜在的安全问题 TCP/IP协议下会进行广播的协议:…...
Python贪心
贪心 贪心:把整体问题分解成多个步骤,在每个步骤都选取当前步骤的最优方案,直至所有步骤结束;每个步骤不会影响后续步骤核心性质:每次采用局部最优,最终结果就是全局最优如果题目满足上述核心性质…...
CSS 盒模型
盒模型 CSS盒模型是网页布局的核心概念之一,它描述了网页元素的物理结构和元素内容与周围元素之间的关系。根据W3C规范,每个HTML元素都被视为一个矩形盒子,这个盒子由以下四个部分组成: 内容区(Content areaÿ…...
【linux】vi编辑文件及readonly文件修改读写权限方法
板端vi修改文件: 1、vi 文件路径 vi mnt/eol/config/oem_eol.xml2、按 i进入修改状态,此时可以修改配置文件 3、按 esc退出修改状态,并按"wq!保存 问题:readonly文件无法直接vi修改 方案: 1、mount -o remoun…...
Git使用笔记
Git 版本控制 一、Git 介绍二、Git 使用1. 安装及配置2. 使用方法3. Git 命令3. 历史版本回退4. 分支 (Branch) 三、远程仓库1. SSH公钥连接Gitee2. 推送到远程仓库 一、Git 介绍 常见版本控制软件:集中式(CVS、SVN),分布式&#…...
mermaid大全(语法、流程图、时序图、甘特图、饼图、用户旅行图、类图)
⚠️ 有些网站的mermaid可能不完整,因此下面教程中可能有些语法是无效的。 😊亲测Typora软件均可以显示。 1. 介绍 Mermaid是一个基于JavaScript的图表绘制工具,它使用类似Markdown的语法来创建和修改各种类型的图表。以下是关于Mermaid的详…...
慧集通(DataLinkX)iPaaS集成平台-业务建模之业务对象(二)
3.UI模板 当我们选择一条已经建好的业务对象点击功能按钮【UI模板】进入该业务对象的UI显示配置界面。 右边填写的是UI模板的编码以及对应名称;菜单界面配置以业务对象UI模板编码获取显示界面。 3.1【列表-按钮】 展示的对应业务对象界面的功能按钮配置࿱…...
vue3+ts+element-plus 输入框el-input设置背景颜色
普通情况: 组件内容: <el-input v-model"applyBasicInfo.outerApplyId"/> 样式设置: ::v-deep .el-input__wrapper {background-color: pink; }// 也可以这样设置 ::v-deep(.el-input__wrapper) {background-color: pink…...
python迷宫寻宝 第6关 安全策略
地图: 1、体力不足去找终点,体力足则原地不动 import api## 判断是否需要离场的函数 # 体力足返回False,体力不足返回True def should_leave():# 拿到我离终点的距离e_row api.get.exit(what"row")e_col api.get.exit(what"…...
【计算机网络】lab7 TCP协议
🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀计算机网络_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 1. 实验目的…...
Monorepo设置:新手指南
Monorepo是一种项目代码管理方法,指在单个代码仓库中管理多个项目,有助于简化代码共享、版本控制、构建和部署的复杂性,并提供更好的可重用性和协作性。 简单理解:所有项目都在一个代码仓库中 📦,但这并不意…...
HTTP 请求与响应的结构
一、引言 在当今数字化的时代,网络通信如同空气一般无处不在,而HTTP协议则是网络世界中最为重要的基石之一。当我们在浏览器中输入一个网址,轻松浏览网页、观看视频、下载文件或是进行在线购物等操作时,背后HTTP协议都在默默地发…...
计科高可用服务器架构实训(防火墙、双机热备,VRRP、MSTP、DHCP、OSPF)
一、项目介绍 需求分析: (1)总部和分部要求网络拓扑简单,方便维护,网络有扩展和冗余性; (2)总部分财务部,人事部,工程部,技术部,提供…...
Soildworks的学习【2025/1/12】
右键空白处,点击选项卡,即可看到所有已调用的选项卡: 点击机械小齿轮选项卡,选择文档属性,选择GB国标: 之后点击单位,选择MMGS毫米单位: 窗口右下角有MMGS,这里也可以选择…...