VisualStudio 工程组织
近日,由于新公司使用 Visual Studio 这款大杀器来开发 C++,闲余之际抽空学了一下 VS 这个 IDE 的使用,记下这篇博客来巩固一下所学的知识,也希望这篇文章能帮到初学VS的新童鞋。
前言
本文以最简单的 HelloWorld 程序作为引子,讲解如何在 VS 中组织代码,期间也会穿插一些 Unix-like 环境下的 C 开发知识,毕竟 C 语言起源于 Unix 系统,其在 VS 中的许多用法或多或少都带有老前辈的身影。
一、C / C++ 开发的基本概念
- 编译:将 .c / .cpp 文件编译成中间文件;
- 在 Unix-like 系统中,中间文件的后缀名是 .o(object 文件) ,称作对象文件或者目标文件;
- 在 Windows 系统中,中间文件的后缀名是 .obj,在这里称作对象文件会比较好,因为 VS 中的目标文件表示项目最后输出的文件;
- 链接:将多个中间文件(即 .o 或 .obj)链接起来,组成一个可执行文件、动态链接库、静态链接库 ;
- 可执行文件:Windows 下的 .exe 文件、Unix-like 下具有 x 权限位的的文件;
- 动态链接库:Windows 下的 .dll 文件、Unix-like 下的 .so 文件(注意,.so 文件也是具有 x 权限的,但是由于没有入口函数 main,故无法直接执行);
- 静态链接库:Windows 下的 .lib 文件、Unix-like 下的 .a 文件;
二、编译,链接的常见问题
- 编译阶段:只检查源文件中所调用的函数是否有声明、以及函数的入参类型是否正确,而不理会函数是否有定义。函数的声明一般放在头文件中,即 .h 文件。由此可推断,编译阶段最常见的问题就是找不到头文件的所在路径,此时,编译器一般会提示找不到标识符;
- 链接阶段:查找源文件中所调用的函数定义,上面提及到链接是将多个中间文件组合成一个新的文件。由此可推断,链接阶段最常见的问题就是找不到中间文件,此时,链接器一般会提示遇到无法解析的命令;
- 静态链接:和静态库链接,把整个库包含到最终输出的文件中,输出的文件不再依赖该静态库;
-
- 动态链接:和动态库链接,在程序执行的时候再链接,输出的文件必须依赖该动态库才能正常运作;
三、VS 基本概念
- Solution:解决方案,这是 VS 中最大的组织单位,在 VS 中组织任何工程都要有一个解决方案,解决方案表示的是整个系统。解决方案的描述文件是 .sln 文件,可以使用文本编辑器查看;
- Project:项目,VS 的中层组织单位,一个解决方案下有多个项目。在构建大型系统时,一般都会将系统划分成多个模块,而每个模块就可以组织成一个项目。项目的描述文件是 .vcxprj 文件,同样也是文本文件,伴随一个项目的另一个描述文件是 .vcxprj.filters,这个是筛选器文件,用来描述 Project 中建立的筛选器(后面会提到);
- Item:项,VS 的最小单位,即源码文件,可以是头文件(.h)或者源文件(.cpp);
。。。。。。(待续)