引言
这两天需要从远端下载一个新的项目,而新项目所依赖的第三方库我电脑本地已经有了,所以就开始一个个修改每个项目的包含目录和库目录,修改了一天都没改完,于是发现问题不对劲
基本知识
众所周知,C++本身的功能十分简陋,经常需要用到其他的各种第三方库,包含目录和库目录可以很方便的管理第三方库
包含目录是头文件存储的地方,一般是在include中
库目录则是链接库在的地方,一般在lib中
那什么要有包含目录和库目录呢?
你可以把一个第三方库看作是一个功能,像我们写C++时,一般是写个函数实现功能,而函数我们都知道需要有声明和定义,例如一个加法功能的函数
int add(int a, int b) { return a + b; }
我们只知道这个功能是这样,但是我们怎么用他呢,所以需要函数的声明,告诉我们应该调用哪个函数,里面的参数传什么类型,才能正确使用它
int add(int a, int b);
既然第三方库也是个功能,所以就需要用头文件来告诉我们怎么用这个功能,也就需要包含目录(知道有哪些功能,怎么正确调用它),所以包含目录里面其实就是一堆头文件,指明了我们都有哪些函数功能
但只知道有哪些功能也不行,因为没有实现这个函数,相当于空中楼阁
而第三方库的函数功能实现,就是在lib里面,它是写好的函数具体实现功能,封装起来,供人们调用,其中库文件分动态链接库和静态链接库
当在VS中把包含目录和库目录配置好后,我们才可以正常使用第三方库的功能
通俗一点说,包含目录就是我们的想法, 我们想得高分,想考研成功,想升职加薪,但只有想法,没有行动(库目录),就是一场空
我的做法
比如我的本地有jsoncpp这个库,在D:\3rd的路径下,并且编译项目时发现json这边报错,缺少的头文件刚好也是我jsoncpp里面的,于是我便把我jsoncpp的include和lib配置进包含目录和库目录中,其实当项目少的话还好,一个解决方案里面有很多项目,并且也不止一个库的时候,VS编译每次也都不一定把错误全报出来完,这样是很费劲的,很傻傻的对上百个错误一个个比对,全部改完还是报错,说的就是我
正确做法
1.明确配置管理器
- 是选Debug还是Release,有些还会有自己弄得配置环境,比如我们的Release_D就是把C++里面的优化功能禁用
- 是选x64还是win32
这两个你没选对项目的正确配置,是编不过的
2.明确项目第三方库的版本
有时编译不过,用everything搜头文件,发现自己电脑里有,所以就直接配上了,这其实是有隐患的
比如第三方库也是会升级的,也许你下载的这个项目所依赖的第三方库版本比你电脑有的要高,刚好高版本新增了或者删除了一些头文件,亦或是其他的删改,你用你电脑自己的配置,将来还是会编译不过的
如果你是从github上下载的项目,注意看说明各个依赖第三方库的版本
如果你是从公司仓库里下载的,则让同事给你发他们在此项目上运行正常的第三方库
3.将项目自带的环境变量加入到本机中
比如项目中头文件json.h包含目录是$(TX3rdParty)\Jsoncpp\include,而你的json.h头文件在E:/3rd/Jsoncpp/include,刚好你也配过环境变量也就是Own3rd代替了E:/3rd,所以你在项目中把$(TX3rdParty)\Jsoncpp\include给删掉,转而用自己的$(Own3rd)\Jsoncpp\include,这样的话,那所有的项目你都要一个个替换成你自己的,非常繁琐
最好的方法是,再去配一个环境变量,把TX3rdParty配成E:/3rd就好了,不用你修改项目的任何包含目录和库目录
另外如果在你第一次打开Sln时候,会让你升级一堆v140类似这样v开头的,尽量不升级,怕出一些问题