夏天/isummer

Sun of my life !Talk is cheap, Show me the code! 追风赶月莫停留,平芜尽处是春山~

博客园 首页 新随笔 联系 管理

1. 关于相对目录

  VS的IDE的集成开发环境中:相对目录是相对某个文件而言的,例如在 VC 项目属性配置附加包含目录、附加库目录则是相对 *.dsp 、 *.vcproj 文件而言的,这是指的是项目的根目录,即如果是在VS2013中,指的是解决方案中的目录文件位置,如下图:

  

  在某个 *.c 、 *.cpp 文件中使用 #include 包含命令,是相对这个 *.c 、 *.cpp 文件而言的。在C或者CPP文件中添加含有路径信息的文件时的原则:(1)当前目录默认是可见的,一般直接引用文件名(夹);(2)对于子文件夹可以添加“./” ,表示当前目录下的子文件,注意使用“/”;(3)“..” 表示导入父目录层的文件内容,即导入父目录的兄弟文件;(4)“../dirAAA” 表示父目录当前层中的目录dirAAA下的内容文件;(5)“../..” 表示祖父层的文件; (6)“../../dirBBB” 表示祖父目录层下的目录dirBBB文件夹下的文件信息。

2. 关于Windows中的目录分隔符认识
    不同OS下面对路径分隔符有不同的定义:路径分隔符在windows下是 \ ,在LInux下是 /

  注意:(1)在#include中可以任意混用,实际在VS2013的MFC中有智能提示功能,在#include中两者都可以采用,如下图;

  (2)但是程序代码中用作路径字符串时必须使用双反斜杠 c:\\test\\abc\\doc\\x.txt,因为有转义符的问题。

  

  (3)在#include  后面“” 与 <> 区别?

   “”   默认的搜索范文是先从当前文件所在的目录位置搜索,然后搜索其他位置。一般首先搜索得是项目中的头文件,然后是系统下的头文件目录。

  <>  默认从项目设置中的系统搜索目录初开始搜索,综上,如果准确定义包含符号,则可以提高搜索速度。一般指得是:项目配置>配置属性>VC++目录>包含目录 ,内容。然后到“附加包含目录”下进行定位。前者是MFC系统包含的目录信息,后者是项目文件中用户添加的包含内容。

  

3. 关于stdafx.h包含的问题

  如果是在模块的位置中添加项目中其他位置的文件,需要参考1中的当前文件中相对目录位置问题解决。最好使用相对目录包含文件,不建议修改系统配置中的VC++目录下下的“包含目录”选项。

 注意,对于stdafx,则保持默认位置,虽然如上图会提示有错误,但是可以顺利通过编译并运行。

4. MFC项目中目录组织的我采取的项目结构方式

   

  说明:在VS2013中,在“解决方案资源视图”中,添加“筛选器文件夹”时,是添加的逻辑上的文件管理方式,但是与项目文件的实际物理存放位置没有关联关系。也就是说,在项目中引用其他头文件时,考虑的仅仅是物理存放的相对位置信息,而不考虑逻辑的文件位置,注意,逻辑文件位置只是提供对项目文件进行规范化模块划分处理。(http://www.cnblogs.com/icmzn/articles/5720097.html)

 

附加依赖项   是指输入项,如某个.LIB文件a.lib,添加到附加依赖项,你的LIB文件被真正包含进来了。等同于“#pragma comment(lib, "winsock.lib") ”语句

附加库目录  是你用 #pragma comment(lib,"a.lib")的时候;此时就搜索a.lib的路径列表就包含这个路径。

------工作目录、控制台输入参数设置-------  

 项目属性>配置属性>调试  设置工作目录,设置命令参数。  默认的工作目录为 ProjectDir ,即 *.dsw/*.vcproj 所在目录(项目根目录)。

工作目录是指当前目录, GetCurrentDirectory() 得到的路径; SetCurrentDirectory 来改变。
运行目录是指 exe 所在路径,可通过 GetModuleFileName() 得到。

  

------包含目录  与  附加包含目录-----

  (1)包含目录,位置:项目配置>配置属性>[VC++目录] ---> 包含目录,   表示影响所有项目以及后续的项目都有效 ,除非必要,一般不建议修改

  (2)附件包含目录, 位置:项目配置>配置属性>  [C/C++]   >   常规 ---> 附加包目录,   表示仅仅对当前项目有效,其他项目无效输入信息的路径参考本项目的根目录,采用相对目录的配置方式。

目录路径不需添加双引号,路径分隔符为 ’\’ 或 ’/’ ,不必考虑反斜杠 ’\’ 的转义。多个路径之间以分号 分隔。

相应的在 “ 项目属性 à 配置属性 à C/C++ à 命令行 ” 中将会出现 “/I ” 的包含命令。

  

  

                      ------附加依赖项  与  附加库目录-----
  (1)添加到“附加依赖项”:则添加的LIB文件会被真正包含进来。 位置:项目属性>配置属性>连接器>输入>附加依赖项。

  


(2)“附加库目录”: 位置, 项目属性 > 配置属性 > 连接器 > 常规 > 附加库目录。   作用:告诉编译器,此处附加的库目录的地址也要在没有搜索的情况下进行搜索。但是库文件没有被包含
包含的仅仅是库文件所在的目录,输入信息的路径参考本项目的根目录,采用相对目录的配置方式。

目录路径不需添加双引号,路径分隔符为 ’/’ 或 ’/’ ,不必考虑反斜杠 ’/’ 的转义。多个路径之间以分号 分隔。

相应的在 “ 项目属性 > 配置属性 > C/C++ > 命令行 ” 中将会出现 “/I ” 的包含命令。


  

             ------VS 环境中 添加 其他文件、其他静态库、其他动态库 一般方法-----
(1)添加其他文件的头文件
  途径一; 直接在当前文件位置,以“相对文件路径”的方式添加头文件,推荐这种方法,影响最小。
  途径二: 在针对此项目在“包含附加目录” 的位置添加 此文件的目录。
      1. 项目属性---配置属性---C/C++---常规---附加包含目录  输入添加的目录位置(相对当前项目的根目录的相对位置)。
      2. 在项目中直接饮用文件的文件名即可,编译器可以根据“附加包含目录”信息添加行文完整路径。
(2)添加其他静态库lib
  途径一: 针对此项目在“附加库目录”的位置添加此静态库Lib目录。
      1. 项目属性---配置属性---连接器---常规---附加库目录  输入lib库的目录信息。
      2. 项目属性---配置属性---连接器---输入---附加依赖项   直接输入lib库的名字,即可。
(3)添加其他动态库dll
  途径一: 添加工程引用的动态库dll,到工程执行的目录下,即可。
            ------附加链接库名称-----
VS2013中,默认的库包含路径信息如下:项目配置--配置属性--VC++目录--库目录 处
对于项目中需要添加特定位置的库,一般两种方式添加
1. 先添加“附加库目录”信息,然后添加“附加依赖项”,这样就将制定目录下的库文件包含在项目中。
 (1)修改“附加库目录”,在项目属性--配置属性--连接器--常规--附加库目录:
    * 使用相对路径的方式,以解决方案下面的项目文件夹的根目录位置添加,“AAA.lib”的相对目录
    目录路径不需要使用“”双引号,路径分隔符使用“\”“/”都可以,同时也不用考虑需要“转义”的问题,
    同时多个路径以“”;“分隔”。
    * 上述操作,会在项目属性--配置属性--连接器--命令行:自动进行同步“/LIBPATH”,可以显示所有
    以及新添加的“库”信息
 (2)(i)修改“附加依赖项”,在项目属性--配置属性--连接器--输入--附加依赖项, 输入“AAA.lib”库文件名字,这样就把
    指定的静态库文件AAA.lib添加到项目中了,
    (ii)或者,也可在文件中使用 #pragma comment(lib, "YourLib.lib") 显式 导入所依赖的静态库),
    多个库之间以空格分隔,也可以显示包含库文件目录。
       ------生成文件目录设置-----
1. 在 “ 项目属性--常规--输出目录 ” 处填写输出目录,在 “ 项目属性--常规--中间目录 ” 处填写中间目录
相对目录参考 *.vcproj 文件(项目文件夹的根目录位置
  如下图所示:$(ColutionDir):解决方案目录,$(Configuration):项目文件夹下的Debug或者Release目录,
  $(ProjectName):项目名,注意:“输出目录”和“中间目录”后面带了WinOS路径标准路径分隔符:\
  
  在 “项目属性--链接器--常规--输出文件 ” 处填写输出文件路径
  输出目录( OutDir )一般为 $(SolutionDir)$(ConfigurationName)
  输出文件( OutputFile )一般为 $(OutDir)/$(ProjectName).exe ( *.lib , *.dll )
  
说明 
$(SolutionDir) 为 *.sln 文件所在文件夹,尾带 ‘/’ ;
$(ProjectDir) 为 *.vcproj 文件所在文件夹,尾带 ‘/’ ;
$(ConfigurationName) 为 *.sln 下的 *.vcproj 文件所在文件夹下的 debug 、 release 文件夹,参考 *.vcproj 文件中的 <Configurations> 配置项。
输出目录 ( OutDir ): $(ProjectDir)$(PlatformName)/$(ConfigurationName)
中间目录 ( IntDir ): $(OutDir)/Intermediate
输出文件 : $(OutDir)/$(ProjectName).lib(dll 、 exe)
查看项目内置“宏”下的具体定义的内容方式
  具体在 “ 项目属性--配置属性--调试--命令 ” 下拉点击 “ 编辑 ” ,展开 “ 宏 (M )>>” ,可以看到很多项目内置宏。
一般的配置为,如下图


-------------项目联编的设置--------------
1. 在VS2013中可以在一个解决方案下包含很多的项目,这样可以用多个项目已不同的输出文件,以及相互之间的依赖顺序
共同对同一解决方案服务。
  VS2013中,通过在解决方案视图中,可以通过在不同的项目中右键,选择“设置依赖项”菜单栏,来调整先后的依赖关系。
-------------导出Makefile------------- 

  导出makefile
posted on 2016-07-30 02:49  夏天/isummer  阅读(909)  评论(0)    收藏  举报