aCu*_*ria 6 c++ svn project-organization visual-c++
我想在SVN中建立一个关于目录结构的项目.我已经在SO上阅读了几个关于此问题的答案,但由于我是新手,所以大多数都很难理解.
我正在构建一个单独的库,其他几个不同的项目取决于:
我需要能够轻松导出MyLibrary(仅限标题和.lib)供第三方使用
MyLibrary1
MyLibrary2
项目1,2,4,5,6 ......
我想知道一个很好的方法来组织这个,请记住我对这个很陌生 - 一个更迂腐的答案会有所帮助.例如,如果您编写类似/ src的内容,请解释应该进入的内容!我可以猜到,但我不确定=)
////////////////////////////////////////////////// ////////////////////////////////////////////////// ////////
//编辑
我不能把它写成评论,所以这里说:@JN,感谢广泛的回复,我想澄清一些内容,我希望我理解你的意思:
root
library foo
/branches // old versions of foo
/tags // releases of foo
/trunk // current version
/build // stuff required by makefiles
/tools // scripts to launch tests ect
/data // test data needed when running
/output // binaries, .exe files
/dependencies // libraries that foo needs
/lib name
include
lib
/docs // documentation
/releases // generated archives
/sample // sample project that shows how to use foo
/source // *.h, *.cpp
program bar
/branches // old versions of bar
/tags // releases of bar
/trunk // current version
/build // stuff required by makefiles
/tools // scripts to launch tests ect
/data // test data needed when running
/output // binaries, .exe files
/dependencies // libraries that bar needs
/lib name
include
lib
/docs // documentation
/releases // generated archives
/sample // sample project that shows how to use bar
/source // *.h, *.cpp
Run Code Online (Sandbox Code Playgroud)
1)*.sln文件在哪里?在/ build?
2)我需要将foo/source复制到bar/dependencies/foo/include吗?毕竟,酒吧取决于foo
3)*.dll文件在哪里?如果foo依赖于dll文件,那么使用foo的所有程序都需要访问相同的dll文件.它应该进入root/dll吗?
您的问题有几个层次:如何组织单个项目源代码树,如何将不同项目一起维护,如何维护这些项目的依赖关系,如何维护每个项目的不同变体以及如何打包它们.
请记住,无论你做什么,你的项目最终会变得足够大,以使其不适应.在项目的生命周期中多次更改结构是正常的.当这种情况发生时,你会感觉它不再正常:通常当设置困扰你时,通常会比它更有帮助.
1 - 维护每个项目的不同变体
没有每个项目的变体,您不会通过维护parralel版本或分支来解决几个变体.有一个单一的每个项目/库,可用于所有变种的源代码树.不管理不同的"操作系统",管理不同的功能.也就是说,有"支持posix套接字"或"支持UI"之类的变体.这意味着如果出现新操作系统,那么您只需选择它支持的功能集,而不是启动新版本.
当需要特定代码时,创建一个接口(C++中的抽象类),并实现与之相关的行为.这将隔离有问题的代码,并将有助于在未来添加新的变体.使用宏在编译时选择合适的宏.
2 - 维护每个项目的依赖关系
有一个特定的"dependencies"文件夹,其中每个子文件夹包含一个依赖项所需的所有内容(包括和子依赖项).在代码库不太大的情况下,您不必太在意自动确保所有依赖项彼此兼容,将其保存以供日后使用.
不要尝试合并svn层次结构中较高根位置的依赖项.正式将每个新版本交付给需要它的团队,由他们自己更新自己的SVN部分.
不要尝试一次使用同一依赖项的多个版本.那会很糟糕.如果你真的需要(但尽量避免使用它),请为每个版本分支项目.
3 - 维护不同的项目
我建议独立维护每个项目存储库(使用SVN它们仍然可以是相同的存储库,但在单独的文件夹中).分支和标签应该特定于一个项目,而不是所有项目.尽量限制分支的最大数量,它们不能解决问题(即使使用git).当你必须并行维护不同的chronoligical版本(而不是变体)并在实际执行之前尽可能地反击时使用分支,每个人都将受益于使用更新的代码.
这将允许施加安全限制(如果可行的话,不能确定使用vanilla SVN,但有一些免费提供的服务器支持它).
我建议每当有人向项目的每个人提交项目时,都会发送电子邮件通知.
4 - 项目源树组织
每个项目都应具有以下SVN结构:
拥有包含以下子文件夹的根文件夹:(其中一些可能由VC本身创建)
不要提交您生成的任何二进制文件,只提交版本.二进制文件喜欢互相冲突,给团队中的其他人带来痛苦.
5 - 打包项目
首先,确保包含带有SVN修订版和日期的文本文件,有一种自动方式可以使用自动道具.
您应该有一个脚本来生成版本(如果时间允许).它将检查所有内容是否已提交,生成新版本号....创建一个zip/tar.gz存档,您必须提交/存档,其名称包含SVN修订版,分支和当前日期(格式应该规范化)项目).存档应该具有运行应用程序所需的一切/在文件结构中使用库.创建一个标记,以便您可以从它开始进行紧急错误修复.