note

一个问题(可能因为第三方库是release版本而不是debug版本):

​ 在vs中,摄像头读取rtsp地址,如果是Release,就可以运行,如果是Debug,就会报错,bad new length、string too long之类的,但如果是调用本地摄像头0,两种模式下都能运行。同样读取一个本地图片时也是,Debug模式会在imshow时直接报错,在Release下就是正常的。(要注意添加的动态库是debug版本还是release版本)

像是vulkan的demo中来看,win上的c++项目,不一定有 int main(),它可能是WinMain,甚至可能是其它的。

cmake编译vs项目的整个命令行生成:(这种好像生成的库文件大小比nmake的小很多)

以往用cmake-gui把vs的项目配好了后,就用vs打开,然后进行编译,纯命令行的实现就是用的NMakefile来做的,现在其实可以将整个过程用命令实现,就不用打开vs了(比较好的还是用vs自带的命令终端): 以protobuf为例:

  1. 下载:https://github.com/google/protobuf/archive/v3.11.2.zip

  2. cd <protobuf-root-dir> mkdir my_build cd my_build

    • cmake -A x64 -DCMAKE_INSTALL_PREFIX=%cd%/install -Dprotobuf_BUILD_TESTS=OFF -Dprotobuf_MSVC_STATIC_RUNTIME=OFF ../cmake # 这一步就是cmake-gui里的配置,一般简单的就直接 cmake -A x64 ..
    • cmake –build . –config Release -j 2 # 这一步就是vs打开的编译效果,同nmake (然后这不仅是对vs有用,linux下也是一样的,就代替make,–build build_dir后面跟的就是build要存放的路径(可以不存在),等价于 -B build_dir 就是简写)
    • cmake –build . –config Release –target install # 这一步就是安装,同nmake install,安装的目录不需要提前创建,可以 –target help 查看lists all build targets,差不多等同于 make help

解读:

总结: 我发现基本上用这种方式和用NMake makefiles最后install生成的文件里的内容都是一样的(都是Release模式)。但是用上面这种方式生成的lib文件夹的大小只有nmake这种方式生成的lib文件夹大小的一半,库小很多啊,以后看用上面这种方式吧,可以它自带了优化。

一、快捷键

1.1. debug

1.2. 其它

二、vs2017添加lib文件

1.1. 项目属性中添加

直接三步走:

Tips:

.dll动态库的设置(必须的,opencv也需要,一般是这样的路径D:\lib\opencv\build\x64\vc15\bin):

​ 有的时候有的第三方库库还要添加.dll动态库文件,一般会默认从C:\Windows\System32中找相应的.dll文件,当然不同的库还有自己独特的.dll文件,当报.dll找不到时,就在第三方库的路径下找到它,并==把其所在目录路径放进PATH系统环境变量中==,这是无论cmd命令行还是vs编译所必须要准备的。


注意:出了以上方式,还有简单的做法,可以直接在 项目—配置属性—VC++目录 里添加头文件、库文件路径,可参看这里

以及使用opencv时,如果是debug模式时就要使用 opencv_world453d.lib 带d的这个lib,如果是release模式的话,就要使用 opencv_world453.lib 不带d这个,不然编译是不通过的。

如果要加载外部文件的话,把文件放在跟main.cpp一起,然后加载的时候就只用写文件位置就行了,不用管执行文件生成在哪里。

1.2. CMakeLists.txt添加

​ 在CMakeLists.txt中set(OpenCV_DIR D:/lib/opencv/build/)(一般说是到有这OpenCVConfig.cmake就好了)或者set(OpenCV_DIR D:/lib/opencv/build/x64/vc15/lib)两者效果是一样;这样在visual studio中必须这样set指定路径,添加进环境变量就不行。

相反在window上是直接使用cmake软件的话,可以添加进环境变量(两种方式),在CMakeLists.txt中就不用set制定路径了

建议都是搞起来嘛,然后就随便用都行。

三、添加参数的调试

第一种:

在解决方案选择要调试的,右键选择项目属性,然后:

配置属性—>调试—>命令参数(这里面填要传的参数,以空格分隔各个参数)

主程序中,带参数的Main函数来接收这些参数

Tips:好像只有.sln的,有解决方案的才行,直接是Cmake项目的不行,曲线救国就是先用cmake编译出.sln再用visual studio打开。


第二种(注意,使用了这种,第一种就会失效用不了了):

使用插件,OneDrive中有,这里是在线下载地址,文件名大概是SmartCmdArgs-v2.2.0.vsix,这种.vsix的插件安装:

接下来是插件的==使用==:

对参数进行添加就好了,这里的配置一次会对release、debug、x86、x64这些都生效。

这里(其实就是在下载地址里)有对cmake项目添加参数支持的说明。

四、界面相关

4.1. 右边出来代码的略缩图

工具—>选项—>文本编辑器—> c/c++ —>滚动条—>使用垂直滚动条的缩略图模式(默认的是上面那个)

在这个里面的格式设置,还可以修改左括号是否另起一行

4.2. 将新打开的文件放到最右边

工具—>选项—>环境—>选项卡和窗口—>选项卡并—>将新选项卡插入现有选项卡的右侧

4.3. 文件列表按实际文件夹显示

项目—>显示所有文件

4.4 控制各类括号是否新占一行

工具—>选项—>文本编辑器—> c/c++ —>格式设置—>新行

五、其它

5.1. 获取软件所需.dll名单

方式一:使用dumpbin.exe

​ 安装vs后,用初始化了vs环境的终端,使用命令:dumpbin /DEPENDENTS my_software.exe

方式二: Dependencies(开源)

Dependencies是对遗留软件Dependency Walker的重写,支持命令行和GUI界面两种方式,下载好后,用命令行的话:Dependencies --modules my_software.exe > depend.txt # 其中[NOT_FOUND]表示缺少的动态库.(简单试了下,有点不得劲,就用方式一吧)


网上看到的参考:(还未做过测试)

如果查看.dll库中包含哪些函数,可以使用:dumpbin /exports xxx.dll >1.txt 如果查看.exe中加载了哪些动态库,可以使用: dumpbin /imports xxx.exe > 2.txt 如果查看.lib中包含哪些函数,可以使用:dumpbin /all/rawdata.none xxx.lib >3.txt 如果查看.obj中包含哪些函数,可以使用: dumpbin /all/rawdata.none xxx.obj >4.txt

六、使用git

先去插件里面把git管理软件下载好。

​ 首先:用vs创建一个新的项目时,如果勾选了了“Git仓库”,会自动生成对应的“.gitattributes”、“.gitignore”文件,并会自动提交。(建议这么来) ​ (当然旧的项目,没有git,可以直接在项目的路径里用git init初始化,然后会发现进到vs中此目录中的所有文件都被add了,提交的话,会commit所有)

​ 且vs与JetBrain最大的不同就是,一旦初始化好了仓库后,在仓库文件夹里添加、修改或是删除文件都会被自动记录(==新文件自动就会被Add==),不会再有手动新文件的Add,所以要注意。所以哪些不想被添加,先去“.gitignore”写好了后再加入吧。

​ 然后可以用命令行与远程仓库添加联系。

注意: