常用编译选项
更多编译选项介绍见:
VS 运行库MT、MD的区别 - 简书
Debug 和 Release 编译方式
cl /MD /EHsc /nologo /O1 /GF /Fe4.exe 4.cpp
/MD
使用动态链接库 /MT
静态链接库
/EHsc
指定异常处理模型
/O1
空间优化 /O2
速度优化 /Od
不优化
/GF
合并重复的字符串,并将字符串常量放到只读内存,防止被修改
/Fe<filename>
或者/Fe: <filename>
指定输出文件名(后者有空格)
uft-8 字符集处理
字符集设置分为源字符集
和执行字符集
源字符集是cpp文件的字符集,执行字符集是程序中存储符号用的字符集。这两者没有任何直接的联系,你完全可以使用UTF-8写代码,用GBK执行
详细可以看微软的文档
cl.exe
提供了两个选项来设置:
/source-charset:<IANA_name|.CPID>
/execution-charset:<IANA_name|.CPID>
分别指定源字符集和执行字符集。源字符集必须和文件编码方式相同。
使用字符集名字(IANA_name)和代码页标号(CPID)均可,例如/source-charset:utf-8
和/source-charset:.65001
都指定源字符集为utf-8,二者对应表可查看微软的文档
/utf-8
则同时指定执行字符集和源字符集为utf-8
编译静态库和动态库
VisualStudio2019构建C/C++静态库和动态库(dll)(文末附源码)_张凯-CSDN博客_dll动态链接库
上面这篇文章写的很详细。
来填个坑:msvc命令行编译静态库和动态库_JackDual的博客-CSDN博客
查看一个lib的导出函数:
dumpbin /EXPORTS xxx.lib
查看一个lib是动态库还是静态库
lib /list xxx.lib
输出是xxx.obj
则是静态库,xxx.dll
则是动态库