更新:这并没有真正回答如何修改 IDE。它只是 C++/Python/Java 的一种 Maven 替代品。您不需要修改 IDE 来构建东西,如果是这样,您需要一个不同的 IDE 或一个为您生成/修改 IDE 文件的系统。(有关跨平台 c/c++ 项目文件生成器,请参阅CMake 。)
我编写了一个系统(首先在两个不同地方的 Ant/Beanshell 中,然后在我目前的工作中用 Python 重写它),其中第三方单独编译(由某人),通过 HTTP 存储和共享。
有点匆忙的描述如下:
启动时,构建系统会查看 repo 中的所有模块,执行每个模块的设置目标,该目标会下载当前代码修订版使用的第三方库或应用程序的特定版本。然后将它们解压缩,将 PATH/INCLUDE 等添加到(或者,对于小型库,将它们复制到当前存储库的单个目录中),然后使用 /useenv 启动 Visual Studio。
每个模块的文件检查它需要的东西,如果它需要安装和许可,例如 Visual Studio、Matlab 或 Maya,则必须在本地计算机上。如果那不存在,则 cmd 文件将失败并显示一个很好的错误消息。这样,您还可以检查是否存在正确的版本
因此,涉及的本地磁盘上有许多目录。%work% 需要使用全局环境变量进行设置,最好在不同于系统或源代码检查的磁盘上设置,至少在执行繁重的 C++ 时是这样。
- %work% <- 所有临时文件、解压缩文件和每个工作副本的临时文件的本地存储
- %work%/_cache <- 下载的 zips (2 gb)
- %work%/_local <- 本地拉链(用于开发或在旅行时以其他方式检索)
- %work%/_unzip <- 解压缩 _cache (10 gb) 中的文件
- %work%&_content <- 纹理/3d 模型和其他大文件(手动同步,今天是 5 GB,也不适合 VC)
- %work%/D_trunk/ <- 存储签出到 d:/trunk 的工作副本
- %work%/E_branches/v2 <- 存储检出到 e:/branches/v2 的工作副本
因此,如果主干使用 Boost 1.37 并且分支/v2 使用 1.39,则 boost-1.39 和 boost-1.37 都驻留在 /_cache/(作为 zip)和 /_unzip/(作为原始文件)中。
使用 d:/trunk/BuildSystem/Visual Studio.cmd 中的 bat 文件启动 Visual Studio 时,INCLUDE 指向 /_unzip/boost-1.37,而如果运行 e:/branches/v2/BuildSystem/Visual Studio.cmd,INCLUDE 指向/_unzip/boost-1.39。
在 repo 中,只需要存储一小部分 bootstrap 二进制文件(即 wget 和 7z)。
我们目前下载了大约 2 gb 的打包数据,这些数据被解压缩到 10 gb(pdb 文件很大!),因此将其置于源代码控制之外是必不可少的。有了这个系统,我们可以保持足够小的 repo 大小以使用 DVCS,例如 Mercurial(或 Git)而不是 SVN,这非常好。(我正在考虑使用 Mercurials bigfiles 扩展或文件共享,而不是单独的 http 服务目录。)
它完美无缺。开发人员只需检查,为其本地缓存设置环境变量,然后通过存储库中的特定批处理文件运行 Visual Studio。没有解压缩或编译或东西。新开发人员可以立即设置他的计算机。(安装 Visual Studio 需要更多时间。)
第一次使用新计算机需要一些时间,但很快,只需几秒钟。下载/解压缩在本地计算机上共享,检查其他分支/版本不会占用更多空间。也可以离线工作,如果上传了新文件,您只需要手动获取 zip 文件。(此机制对于测试第三方库的新版本/编译至关重要。)
基础知识在 bitbucket 上的一个repo 中,但是在它为公众准备好之前还需要做更多的工作。除了文档和波兰语,我还计划:
- 将其扩展为使用 cmake 而不是原始 vcproj 文件,以使其更具跨平台性。
- 编写从第三方包的签出/下载到构建和压缩它们的整个过程(包括将下载存储在本地存储库中)......目前在我的开发计算机上。不好。会修复。:)
至于 moc,我们使用Qt 的 Visual Studio 插件,它将其存储在 .vcproj 文件中。效果很好。我确实认为CMake是最好的答案之一