初学者必读:讲解 VC 下如何正确的创建、管理及发布项目
Visual C++ 的项目文件组成,以及如何正确的创建及管理项目。
本内容是初学者必须要掌握的。不能正确的管理项目,就不能进一步写有规模的程序。
一、项目下各种常见文件类型的功能
1. 代码文件
扩展名为 .cpp、.c、.h 等。
通常情况下,项目会由多个代码文件和头文件组成,每个文件实现不同的功能。
2. 资源文件
扩展名为 .rc 。
资源文件中定义了项目中所需的各种资源,例如图片、图标、对话框、声音等。项目中的资源引用情况均会记录在其中。有些资源会完整的记录在 .rc 里面,有些资源仅仅在 .rc 里面记录一个链接。
3. 项目管理文件
扩展名在不同版本的 VC 下有区别:VC6 为 .dsp,VC2008 / VC2010 为 .vcproj,VC2012 为 .vcxproj 。
项目管理文件管理所有代码、资源文件以及项目设置。
4. 工作区管理文件
扩展名在不同版本的 VC 下有区别:VC6 为 .dsw,VC2008 及以上版本为 .sln 。
在工作区内可以包括多个项目。
5. 编译的输出文件
默认情况下,VC 会将编译结果输出在 Debug 和 Release 文件夹下面。
二、创建项目
每个项目要有一个独立的文件夹,千万不要在同一个文件夹里面放不同项目的代码文件。
使用 VC 创建项目的时候,会自动以项目名称建立一个文件夹。具体创建项目的步骤,请参考 EasyX 官网的 Flash 演示视频。
我理解,很多初学者写的项目都只有几十行,为了几十行代码就创建一个文件夹以及一大堆于此相关的文件,似乎不值得。但是,编写代码必须使用正确的方式,同一个文件夹只能有与本项目相关的文件。
当然,如果仅仅作为小代码的保存方式,也是可以在同一个文件夹下面存放多个不同项目的代码文件的。
每次启动项目,不要双击 .cpp 文件,而要双击 .dsw 文件。这样才能让项目相关的文件都被正确关联。
三、管理项目
随着代码越写越大,项目所涉及的文件也会越来越多。这时候,将这些文件分类存放就显得很重要了。例如,可以将所有图片资源放在 res 文件夹下面等等。
对于代码的管理,建议学习下 git。
四、发布项目
项目写完以后,如果需要把最终生成的 .exe 分享给好友,需要以下步骤:
1. 使用相对路径
调整代码,确保使用相对路径加载图片或音效等资源文件。
注意,如果从 VS 中执行程序,那么当前路径为项目所在路径,而不是 exe 所在的 debug 或 release 文件夹。
2. 生成项目的 Release 版本
在 VC 顶部的工具条上可以切换编译方式是 Debug 还是 Release。发布项目的时候,需要使用 Release 版本。
VC 的编译设置有两类:Debug 和 Release。
Debug 文件夹下面的 .exe 文件,是用来调试的,里面包含多种调试信息,比较臃肿,并且使用的是调试版本的运行时库,发给别人的时候,别人通常是无法执行的。
Release 文件夹下面的 .exe 文件,是用来发布的,里面删掉了所有调试信息,比较精简,并且使用是常规的运行时库,微软提供了该运行时库的安装包,并且很多人的系统中已经安装过。所以发布项目的时候,需要使用 Release 版本。
3. 附加运行时库
使用 Release 设置编译生成的 .exe,通常需要依赖运行时库才能执行。
附加运行时库有 3 种办法(推荐使用前两种):
3-1 打包运行时库
常见的做法,是通过安装程序将运行时库与 .exe、图片、音效等打包在一起,安装的时候,由安装程序检查系统中是否存在所需的运行时库,如果不存在,就自动安装。这样,可以确保 .exe 的运行环境是完备的。
安装程序推荐用 inno setup 或 nsis setup 来制作。
关于运行时库:
VC6 编译的 Release 版本的 .exe 文件,可以单独运行在任何 windows 平台上(大于 win95 即可)。
VC2008(及更高版本)编译的 Release 版本的 .exe 文件,运行它的电脑需要安装对应版本的运行时库。电脑上一般都有安装。如果没有安装,单独装一下就好了。
几个版本的运行时库的微软官方下载地址:
- VC2008 (VC++ 9.0) 运行时库:Visual C++ 2008 运行时库 9.0.30729.5677 - AppZip
- VC2010 (VC++ 10.0) 运行时库:Visual C++ 2010 运行时库 10.0.40219.1 - AppZip
- VC2012 (VC++ 11.0) 运行时库:Visual C++ 2012 运行时库 11.0.61030.0 - AppZip
- VC2013 (VC++ 12.0) 运行时库:Visual C++ 2013 运行时库 12.0.30501.0 - AppZip
- VC2015 (VC++ 14.0) 运行时库:Visual C++ 2015 运行时库 14.0.24212.0 - AppZip
- VC2017 (VC++ 15.0) 运行时库:Visual C++ 2017 运行时库 14.16.27033.0 - AppZip
- VC2019 (VC++ 16.0) 运行时库:Visual C++ 2015-2019 运行时库 14.27.29112.0 - AppZip
3-2 打包运行时 dll
如果不想制作安装程序那么麻烦,可以将运行时库里面所需的 .dll 文件提取出来,和 .exe 放在同一个文件夹下,也是可以的。
3-3 静态链接
可以使用静态链接的形式,将需要用到的库与 .exe 链接在一起。方法:
打开项目属性对话框,选择:“Configuration Propertiees [配置属性] -> C/C++ -> Code Generation [代码生成]”,右侧将“Runtime Library [运行时库]”设置为“Multi-threaded (/MT) [多线程(/MT)]”。
这样做的缺点是:.exe 体积增大,且无法与其它程序共享运行时库的内容。
4. 考虑是否支持 Windows XP
如果希望你的程序可以运行在 WinXP 中,还需要这样设置:
打开项目属性对话框,选择:“Configuration Properties [配置属性] -> General [常规]“,”,右侧将“Platform Toolset [平台工具集]”设置为“Visual Studio 20** - Windows XP (v1**_xp)”。
全套源码素材看我:725022484
小鱼快来啊的个人空间-小鱼快来啊个人主页-哔哩哔哩视频哔哩哔哩小鱼快来啊的个人空间,提供小鱼快来啊分享的视频、音频、文章、动态、收藏等内容,关注小鱼快来啊账号,第一时间了解UP注动态。编程学习群:725022484 每天分享一个编程小游戏~C/C++游戏源码素材及各种安装包, 私信不常看!
https://space.bilibili.com/1827181878?spm_id_from=333.788.0.0
相关文章:
初学者必读:讲解 VC 下如何正确的创建、管理及发布项目
Visual C 的项目文件组成,以及如何正确的创建及管理项目。 本内容是初学者必须要掌握的。不能正确的管理项目,就不能进一步写有规模的程序。 一、项目下各种常见文件类型的功能 1. 代码文件 扩展名为 .cpp、.c、.h 等。 通常情况下,项目…...
剑指offer(中等)
目录 二维数组中的查找 重建二叉树 矩阵中的路径 剪绳子 剪绳子② 数值的整数次方 表示数值的字符串 树的子结构 栈的压入、弹出序列 从上到下打印二叉树① 从上到下打印二叉树③ 二叉搜索树的后序遍历序列 二叉树中和为某一值的路径 复杂链表的复制 二叉搜索树与…...
微软发布会精华回顾:“台式电脑”抢了风头
Lightbot北京时间2016年10月26日晚10点,微软在纽约发布了名为 Surface Studio 的一体机、名为 Surface Dial 的配件以及外观未变的顶配版 Surface Book。同时,微软宣布了 Windows 10 下一个重要版本——“Creators Update”的数项新功能,包括…...
CF1561C Deep Down Below 题解
CF1561C Deep Down Below 题解题目链接字面描述Deep Down Below题面翻译题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示思路TLE算法具体思想TLE特例AC思想代码实现备注题目 链接 https://www.luogu.com.cn/problem/CF1561C 字面描述 Deep Down Below 题面翻译…...
秒杀项目之服务调用分布式session
目录 nginx动静分离 服务调用 创建配置zmall-cart购物车模块 创建配置zmall-order订单模块 服务调用 spring session实战 什么是Spring Session 为什么要使用Spring Session 错误案例展示 配置spring-session 二级域名问题 用户登录 nginx动静分离 第1步ÿ…...
聊聊什么是架构,你理解对了吗?
什么是架构?软件有架构?建筑也有架构?它们有什么相同点和不同点? 下面咱们就介绍一下,容易混淆的几个概念 一、系统与子系统 系统 泛指由一群有关联的个体组成,根据某种规则运作,能完成个别元件不能单独完成的工作的群体。它的意思是 “总体”、“整体”或“联盟” 子系…...
java多线程开发
1.并发和并行 并发:同一时间段内多个任务同时进行。 并行:同一时间点多个任务同时进行。 2.进程线程 进程(Process):进程是程序的一次动态执行过程,它经历了从代码加载、执行、到执行完毕的一个完整过程…...
杂记7--opencv的ar码模块学习
背景:项目需要用到marker知识,所以到官网上临时补一些知识。 概要:主要介绍marker一些接口的含义,纯属个人理解,有误则希望大佬不吝赐教 1、 涉及ar码操作学习,其头文件为: #include <op…...
[项目设计]高并发内存池
目录 1、项目介绍 2、高并发内存池整体框架设计 3、thread cache <1>thread cache 哈希桶对齐规则 <2>Thread Cache类设计 4、Central Cache <1>Central Cache类设计 5、page cache <1>Page Cache类设计 6、性能分析 <1>定长内存池实现…...
28岁才转行软件测试,目前32了,我的一些经历跟感受
我是92年的,算是最早的90后,现在跟你介绍的时候还恬不知耻的说我是90后,哈哈,计算机专业普通本科毕业。在一个二线城市,毕业后因为自身能力问题、认知水平问题,再加上运气不好,换过多份工作&…...
Python导入模块的3种方式
很多初学者经常遇到这样的问题,即自定义 Python 模板后,在其它文件中用 import(或 from...import) 语句引入该文件时,Python 解释器同时如下错误:ModuleNotFoundError: No module named 模块名意思是 Pytho…...
select 与 where、order by、limit 子句执行优先级比较
当 select 和 其他三种语句的一者或者多者同时出现时,他们之间是存在执行先后顺序的。 他们的优先级顺序是:where > select > order by > limit 目录 1、select 与 where 2、select 与 order by 3、order by 与 limit 4、优先级证明 1、s…...
Linux内核并发与竞争-原子操作
一.原子操作的概念首先看一下原子操作,原子操作就是指不能再进一步分割的操作,一般原子操作用于变量或者位操作。假如现在要对无符号整形变量 a 赋值,值为 3,对于 C 语言来讲很简单,直接就是: a3但是 C 语言…...
Java笔记-泛型的使用
参考: Java 泛型,你了解类型擦除吗? 泛型的使用 1、泛型的定义 可以广泛使用的类型,一种较为准确的说法就是为了参数化类型,或者说可以将类型当作参数传递给一个类或者是方法。 2、泛型的使用 2.1泛型类 public c…...
特斯拉无人驾驶解读
来源于Tesla AI Day Tesla无人驾驶算法的核心任务就是如何理解我们所看到的一切呢?也就是说,不使用高端的设备,比如激光雷达,仅仅使用摄像头就能够将任务做得很好。Tesla使用环绕型的8个摄像头获得输入。 第一步是特征提取模块Backbone,无论什么任务都离不开特征…...
生物素-琥珀酰亚胺酯Biotin-NHS;CAS号:35013-72-0;可对溶液中的抗体,蛋白质和任何其他含伯胺的大分子进行简单有效的生物素标记。
结构式: 生物素-琥珀酰亚胺酯Biotin NHS CAS号:35013-72-0 英文名称:Biotin-NHS 中文名称:D-生物素 N-羟基琥珀酰亚胺酯;生物素-琥珀酰亚胺酯 CAS号:35013-72-0 密度:1.50.1 …...
Maven_第五章 核心概念
目录第五章 其他核心概念1、生命周期①作用②三个生命周期③特点2、插件和目标①插件②目标3、仓库第五章 其他核心概念 1、生命周期 ①作用 为了让构建过程自动化完成,Maven 设定了三个生命周期,生命周期中的每一个环节对应构建过程中的一个操作。 …...
【深度学习】人脸识别工程化落地
文章目录前言1、facenet2、使用2.1.其它blog2.2 实践总结前言 老早以前就希望能写一篇关于人脸识别的工程化落地的案例,一年前做疲劳驾驶时使用的dlib插件,它封装好了,人脸检测、对齐、相似度计算三个部分,就是插件比较难装,但同时也少了很多…...
AOP面向切面编程思想。
目录 一、AOP工作流程 1、基本概念 2、AOP工作流程 二、AOP核心配置 1、AOP切入点表达式 2、AOP通知类型 三、AOP通知获取数据 1、获取参数 2、获取返回值 3、获取异常 四、AOP事务管理 1、Spring事务简介 2、Spring事务角色 3、事务属性 一、AOP工作流程 1、…...
实验7-变治技术及动态规划初步
目录 1.统计个数 2.数塔dp -A 3.Horspool算法 4.计数排序 5.找零问题1-最少硬币 1.统计个数 【问题描述】有n个数、每个元素取值在1到9之间,试统计每个数的个数 【输入形式】第一行,n的值;第二行...
利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
C#中的CLR属性、依赖属性与附加属性
CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...
stm32进入Infinite_Loop原因(因为有系统中断函数未自定义实现)
这是系统中断服务程序的默认处理汇编函数,如果我们没有定义实现某个中断函数,那么当stm32产生了该中断时,就会默认跑这里来了,所以我们打开了什么中断,一定要记得实现对应的系统中断函数,否则会进来一直循环…...
Ray框架:分布式AI训练与调参实践
Ray框架:分布式AI训练与调参实践 系统化学习人工智能网站(收藏):https://www.captainbed.cn/flu 文章目录 Ray框架:分布式AI训练与调参实践摘要引言框架架构解析1. 核心组件设计2. 关键技术实现2.1 动态资源调度2.2 …...
