我即将开始使用C++编写的跨平台库.接下来,我打算为其他语言实现绑定,例如Python,Java等.这些库需要在主要平台上可用:win32,Linux和Mac OSX.
虽然该应用程序实际上是一个库,但是一些基本的控制台程序将与它一起捆绑以进行演示和测试.
在开始在Subversion中存储东西之前,我想提出一个最佳的文件夹结构.
我想的是:
/project //Top level folder /bin //Binaries ready for deployment /linux_amd64 //Linux AMD64 platform /debug //Debug build - duplicated in all platforms /release //Release build - duplicated in all platforms /linux_i386 //Linux 32-bit platform /macosx //Mac OS X /win32 //Windows 32-bit platform /cygwin //Windows 32-bit platform compiled with Cygwin /vs.net //Windows 32-bit platform compiled with Visual Studio .NET /win64 //Windows 64-bit platform /build //Make and build files, IDE project files /linux_amd64 //Linux AMD64 platform /linux_i386 //Linux 32-bit platform /macosx //Mac OS X /win32 //Windows 32-bit platform /win64 //Windows 64-bit platform /config //Configuration files that accompany the binaries /data //Data files that accompany the binaries /doc //Documentation /lib //External or third-party libraries /platforms //Platform-specific code for ... /linux_amd64 //Linux AMD64 platform /linux_i386 //Linux 32-bit platform /macosx //Mac OS X /win32 //Windows 32-bit platform /win64 //Windows 64-bit platform /src //Available library source code in subfolders /src //Source code tree - this will contain main.cpp /bindings //Bindings to other languages such as ... /python /java /h //Header files /modules //Platform-independent modules, components or subprojects /platforms //Platform-specific code for ... /linux_amd64 //Linux AMD64 platform-specific code /linux_i386 //Linux 32-bit platform-specific code /macosx /win32 //Windows 32-bit platform-specific code /win64 //Windows 64-bit platform /test //Automated test scripts
如果你有建议,我很乐意听到.我想知道是否有一个工具可以帮助创建这个结构.
我打算使用CMake和Subversion.
结构对我来说很好,但有几点:
将C++头文件和源文件分成不同的目录是正常的,或者模块目录中是否有未显示的结构?
你可能希望目录放入像*.obj这样的中间文件
您将需要不同的目录来调试和释放输出文件
像InnoSetup这样的安装程序的目录及其安装文件可能很有用 - 你必须做出关于是否版本控制这些文件的哲学决定
至于创建结构的工具,只需几分钟就可以编写一个bash脚本 - 所有平台都可以使用相同的工具(如bash).
为什么需要二进制文件的不同平台文件夹?您将在不同的平台下使用相同的文件系统构建此源代码?
如果是,我认为你也需要compiller特定的文件夹.
为什么不使用不同的文件夹进行调试和发布构建,可能是unicode和非unicode,单线程或多线程构建?
看看bjam或Scons做替换者.也许你不需要构建目录中的不同文件夹.
我认为如果"modules"目录中的所有模块都包含测试用户的"tests"目录会更好.
最后 - 看看boost库,这个platofrm独立库有很好的结构.
还尝试从其他平台独立项目中获取想法.
提升文件夹结构:
boost - root dir - boost - library header lib ( for users ) - libs - library source dir ( one dir per lib ) - build - library build files ( if they are needed ) - doc - documentation files - example - sample programs - src - library source files - test - programs and srcipts for testing module - bin - created by bjam build system - libs -for all compiled folders from libs [example|test|build] - /<[static|dynamic]-link>/<[debug|release]>/<[threading mode]> contain builded [obj|dll|lib|pdb|so|o|etc] files see detailed information in bjam build system - doc - tools
如果您选择bjam - 您将不会担心构建和bin文件夹结构.
此外,您的libs/src/dir可以包含所有平台文件的自己,并且可以包含平台特定文件的dirs.
我没有在你的文件夹结构中看到任何严重的问题,也许你会在开始编写项目原型时看到它们.