VS2010中VC++目录和C/C++之间的区别。VC++ Directories和C/C++的区别。

首先,这是个历史遗留问题,说起来比较复杂。其次,这个问题在微软的MSDN博客上已经专门被说起过了,英文好的请直接移步到原文:《VC++ Directories》。另外,stack overflow上面也有人问到过,但是首选回答的人回答是错的,因为他没看 《VC++ Directories》,主要看后面的这段:

VC++ Directories: Include Directories

  • this value is inherited from the INCLUDEWindows environment variable which is defined outside of Visual Studio
    • environment variables can be: global to the computer or have user level scope
    • The INCLUDE and LIB environment variables are created when the Microsoft Windows SDK is installed with Visual Studio.

C/C++: Additional Include Directories

  • is a project level setting... you will have to define this value for every project in your solution
  • this value can be persisted to source control

好了,如果你英文不好,那么还是听我的这个二手货吧。

VC++ Directories本来是对应于SDK的,他的变量是一个Windows环境变量,就和你在操作系统的控制面板里面添加的环境变量是一样的,比如这也有PATH,这个PATH和你在控制面板里面的PATH是一样的。但是,毕竟这个是用于搞开发的一些环境变量,所以呢,就把它搞到继承开发环境里面来设置了,这样你就可以不用在操作系统的控制面板里设置他们,而且这些环境只在VS中有效。

而C/C++中的设置呢,它不是设置环境变量,它是设置命令行参数的,所以你可以很清晰的看到,它还有一个Command Line设置项,这个项分两块,上面是根据你前面填写项的指生成的,比如你的Additional Include Directories设置,就会对应到 /I [path]上面来,下面有个叫Adittion Option的框框,是供你填一些上面没有的或者其他需要补充的命令行参数的。既然是命令行参数,那肯定是针对当前这个工程的了。

 

本来一切已经很明确了:“VC++目录”影响全局,只要是电脑上的这个VS创建的工程,都会被这个设置影像到; 而C/C++只影响到单个的工程,一个工程一个C/C++。

但是怪就怪在,微软觉得这种全局的方式太粗暴了,所以在VS2010之后,“VC++目录”变得也只影响单个工程了,而且还只能在工程上右键“属性”才能大概,以表示它是属于这个工程的。在VS2008中,这个设置还可以从Tools菜单中打开。所以,在VS2010之后,这二者就变成没区别了。

但是真的没区别了吗?呵呵,区别大了(奔溃。。。)

前面已经说过了,VC++ Directories是一个Windows环境变量,C/C++是命令行参数,这是本质区别;但是相同的项,也就是VC++ Directories中的include directories 对应到C/C++中的addition include directories 是一样的效果,也就是说效果一样。同样是命令行参数的还有Link设置,Link设置中的 addition library directories对应到VC++ Directories 中的library directories,也就是说,效果是相同的。

总之,很坑爹。。。

 

posted on 2017-12-02 16:24  J.M.Liu  阅读(6100)  评论(1编辑  收藏  举报