常见的大型软件项目开发文件目录结构
1. Java 项目
调试阶段编译后的 .class 文件放到 classes 目录。将 classes 目录和 lib 中的其他工具 .jar 放到 classpath 中。运行当前目录是项目根目录。
正式发行版的 .class 放到一个或者多个 .jar 文件中,一般放在目根目录,也要加到 classpath 中去。
由于在 Java 项目中,经常用多种编译器进行编译,比较普遍的是,开发是使用开发工具编译,打包时使用 Javac 编译, project 文件被放到次要的位置。
2. Visual Basic 项目
Visual Basic 项目编译后的 COM DLL 和 Exe 一般放在项目根目录下面。由于 Visual Basic 中做 COM DLL 很容易,因而大量使用子项目编译 COM DLL,通过主 Exe 启动后加载。
以上的目录设置存在一种问题: 调试的时候,当前目录在子项目目录下面,比如为 module1_submodule2,而发行版本的当前目录在项目根目录下面,因此需要在程序启动的时候判断处理。
3. Visual C++ 项目
调试阶段,所有 dll,lib 文件放到 build 和 lib 目录下面。对于子项目, build 的时候直接把 dll , exe 放到 build 目录下面。
同 Visual Basic 项目一样,存在调试阶段和正式版本的当前目录不一致的问题。不过, VC 的项目属性中可以设置 working directory ,所以这个问题也很容易解决。
对于大型项目,还存在一个问题,那就是整个项目编译时间很长,可能达到半个小时以上。让每个人每天上午从版本库里取最新代码,这是很正常的做法。但是没有必要让每个人每天上午都花半个小时以上时间。比较常见的做法是,在某一台服务器上面运行一个定时编译批处理程序,一般在半夜,编译后的文件放在共享目录中。这样程序员每天上班后只需要从版本库里取最新的源代码,然后复制编译后的文件,如 .class, .obj,.dll,.exe。
这里有另外一个要注意的地方,就是不同计算机的时间要同步。不能服务器时间是五月一日,我的计算机时间是六月一日。编译器可以做到增量编译,节省时间。增量编译比较源代码的时间和编译后的文件时间。由于编译后的文件是从服务器中复制得到,不同计算机时间不能相差太多。
自动编译后的文件如 .class, .obj,.dll,.exe 一般并不放入版本库,而只是共享。因为如果放入版本库,从客户端下载后的文件属性是只读的,有很多不方便。
当然,如果只是小型项目,所有文件放在一个目录也没有多大关系,更省事。