快速上手 vs2019
在前文《MSVC编译静态库》已经稍微提及了一下 vs2019 的一些使用技巧。本文打算直接把 vs2019 讲透。
以之前的 hello.c 单文件项目为例,之前我们是手动使用 cl.exe 跟 link.exe 来编译链接的,本次我将用 vs2019 来实现这些操作。
首先,打开 vs2019 ,创建一个空项目,命名为 c-single,如下:

这里我们再创建一个 C++ 控制台项目,命名为 c-single2,比较这两个 项目文件有什么区别?


用 git 来比较一番,项目根目录下的 sln 文件,只是名字不一样,实际上没有差别。

其他文件的差异如下:


因此,虽然 vs2019 创建项目的时候,有很多类型的项目可以选择,看起来好像很复杂,但是实际上,就是配置一下 xml 文件。
TODO,讲一下 vs2019 的 4 个配置文件的主要作用。
现在回到 c-single 项目,右键项目,点击 Add ➜ New Item,这个按钮实际上就是创建一个新的文件并且加进去项目的 xml 配置文件里面。
直接输入 hello.c 即可,如下:

然后把以下代码复制进去:
然后点击 菜单栏的 Build ➜ Rebuild Solution ,如下:

从 vs2019 输出的日志可以看到 编译参数,如下:
上面的日志中 cl.exe 使用了 /MDd 选项,所以是动态链接 C 运行时库。
然后链接参数如下:
上面 vs2019 会给我的 hello.obj 加很多 静态库选项 ,例如 gdi32.lib,uuid.lib,虽然 hello.obj 没使用这些静态库的函数,但是 vs2019 为了方便还是全加上了,因为是静态库,你没用到的函数就不会拷贝进去 exe。
扩展知识:如果我们想 vs2019 调用 cl.exe 的使用不要用 /MDd ,而是使用 /MTd,那该如何办?
因为 cl.exe 是编译阶段的操作,所以直接打开项目配置, C/C++ ➜ Code Generation ,设置为 /MTd 即可,如下:

再次 rebuild 一下项目,就会发现,日志里面 cl.exe 使用的是 /MTd 了。
这个 /MTd 其实也是保存在 xml 配置文件里面的,如下:

vs2019 界面上的大部分属性,配置,都是用 xml 保存的,然后 vs2019 解析这些 xml 配置,传递参数给 cl.exe 跟 link.exe。
至此,vs2019 的讲解就完了,其实只要学会看 vs2019 的输出日志,掌握编译链接的一些知识,无论多么庞大的 C/C++ 项目,都能轻松编译通过。
vs2019 无非就是管理跟解析 xml 文件,然后传递参数给 cl.exe ,lib.exe ,link.exe。
扩展知识:vs2019 是调 msbuild.exe 来管理跟解析 xml 的。
更多内容,请访问《FFmpeg原理》
版权声明: 本文为 InfoQ 作者【Loken】的原创文章。
原文链接:【http://xie.infoq.cn/article/dec24f5f9b08deb845b00715d】。未经作者许可,禁止转载。
评论