http://www.cnblogs.com/ShaneZhang/archive/2013/05/20/3088688.html

从工程上讲,头文件的文件名应该与对应的源文件名相同便于维护,如果头文件中包含了多个源文件中的定义或声明,则应该按源文件分组布局头文件中的代码,并且通过注释注明每组所在的源文件。当一个工程的文件较多时应该将源文件与头文件分开目录存放,一般头文件存放在include或inc目录下,而源文件存放在source或src目录下,根据经验,一个工程的文件数超过30个时应该将源文件与头文件分开存放,当文件较少时直接放到同一目录即可。

其实,C++标准中也没有确定这两种方式搜索文件filepath的顺序,而是由编译器的实现确定,其区别就是如果编译器按照第二种形式定义的顺序搜索文件filepath失败或者不支持这种方式时,将其替换为第一种顺序再进行搜索。

而实际上,一般来讲第一种方式都是先搜索编译器的系统目录,而第二种方式则是以被编译的头文件所在目录为当前目录进行搜索,如果搜索失败再在系统头文件里搜索。这两种方式从本质上讲没有什么区别,但当我们自己的程序文件与系统头文件重名时,用后者就会先搜到我们的头文件而不是系统的。但无论如何,与系统头文件重名都不是一个好习惯,一不小心就可能带来不必要的麻烦,当我们自己编写程序库时,最好把它放入一个目录里,不把这个目录直接添加到编译器的头文件搜索路径中(如gcc的-I, visual c++的/I选项等,其实在UNIX/Linux平台的编译器一般都是-I选项),而是添加到上一级目录,而在我们的源文件中引用该头文件时就包含该目录名,这样不容易造成冲突。

例如,我们创建了一个程序库叫mylib,其中一个头文件是strutil.hpp,我们可以创建一个/home/user/project/src/mylib目录,然后把strutil.hpp放进去,然后把 /home/user/project/src添加到编译选项里:

gcc -I/home/user/project/src

这样,在我们的源程序中可以这样引用strutil.hpp文件:

#include “mylib/strutil.hpp”

通过显示的目录名引用头文件就不容易产生冲突,不容易使我们自己的头文件与系统头文件产生混淆。

当然,从代码逻辑上我们还有另外一种解决冲突的方案,那就是命名空间,详见第[?]节。

http://blog.sina.com.cn/s/blog_6e0693f70100so42.html

VS做的很智能,一个F7就完成了预处理、编译、链接的所有工作。但是当工程比较大,使用的文件模块比较多, 一旦出现编译错误定位问题时就比较困难。因此,有时候需要对每个模块单独编译,就像Linux下编写的 makefile文件一下,分别编译每一个.o目标文件然后再链接成为一个.exe可执行程序。总结下在VS下使用命令行分别编译程序的方法。

在dos下编译的前提环境配置要求:

1.找到vs的cl.exe所在目录,在vs2010为F:\visual 2010\VC\bin,可参考。

2.点击“我的电脑”进行环境变量的配置,找到"path"变量加分号后加入刚才的路径。

3.重新运行cmd开启新的命令窗口,输入cl检查path设置是否生效。(只需配置一次即可,以后再次运行的时候不用再运行此命令)。

4.输入vcvars32,这条命令是运行同路径下的vcvars32.bat设置它的环境变量。

5.输入cl hello.cpp即可正常编译。

下面总结一些常用的命令:

通过快捷方式Visual Studio Command Prompt (2010)可以打开VS的命令行界面。

(1) 在命令行提示符窗口中输入:cl  /?   或者   cl -help 可以查看cl所有的命令选项。

(2) 在默认情况下cl编译完后会自动调用link进行链接,可以使用/c选项阻止链接。

(3) 编译一个文件命令:cl /FeMyapp 1.cpp,然后输入程序名Myapp执行程序。(注意1.h在本地,可以通过/I选 项指定头文件路径)

(4) 编译多个文件命令:cl /FeMyapp 1.cpp 2.cpp 3.cpp,然后输入程序名Myapp执行程序。

(5) 只输出 .i 预编译文件命令:cl /FiA /P A.cpp,然后会生成 A.i 预编译文件。这个方法类似Linux下的  gcc -E A.cpp -o A.i 命令。此命令的主要作用是用于检查未定义情况的错误。

(6) 只输出 .o 目标文件命令:cl /FoA /c A.cpp,然后会生成 A.obj 目标文件,类似Linux下的 .o 文件。注 意这里应该带上 /c 选项,原因见(2),即默认情况下,cl会自动对编译好的目标文件进行链接,如果此时,所 编译的目标文件引用了其他目标文件中的符号的话,就会出现链接错误。

参考网址 :http://zhidao.baidu.com/question/184905864

最新文章

  1. [Android Tips] 12. How to Create a Dash Line Shape
  2. APICloud支持Atom编辑器,并建立开发工具核心库
  3. Brackets 配置
  4. Eclipse问题解决方案,不断更新
  5. 使用Highcharts生成折线图与曲线图
  6. Java之旅(三)--- JSTL和EL表情
  7. HDU 5887 Herbs Gathering
  8. JS中undefined与null的有趣 关系
  9. 个人作业-2 英语学习APP分析
  10. 从输入 URL 到页面加载完成的过程中都发生了什么
  11. Scala对MongoDB的增删改查操作
  12. 「ZJOI2016」旅行者 解题报告
  13. Linux中设置别名
  14. $\mathcal{OI}$生涯中的各种数论算法的证明
  15. Android提供的layout文件存放位置
  16. poj1504 Adding Reversed Numbers
  17. 使用commons-pool2实现FTP连接池
  18. 扫描系统句柄表(WIN7 x86)(附录源码)
  19. GIS(地理信息系统)
  20. BZOJ 3224 普通平衡树 | 平衡树模板

热门文章

  1. Thinkphp常用的方法和技巧(转)
  2. Java 图形编程 一:入门
  3. Reactor模式
  4. 完整DataTable与IList互换(转)
  5. Qt Script
  6. tomcat内存溢出,设置
  7. google chrome 32 升级变更找回user agent(google chrome lose user agent)
  8. HDU 5629 Clarke and tree dp+prufer序列
  9. [转载]eclipse中设置文件的编码格式为utf-8
  10. 【WCF--初入江湖】12 WCF与Ajax编程