Not*_*ist 9 c++ boost annotations g++
我们这边有Boost库.它由大量文件组成,这些文件永远不会改变,只使用它的一小部分.如果我们要更改版本,我们会交换整个boost目录.目前我们的SVN中有Boost源,逐个文件,这使得结账操作非常慢,特别是在Windows上.
如果有一个符号/插件来解决ZIP文件中的C++文件会很好,例如:
// @ZIPFS ASSIGN 'boost' 'boost.zip/boost'
#include <boost/smart_ptr/shared_ptr.hpp>
Run Code Online (Sandbox Code Playgroud)
在g ++中是否支持编译器挂钩?有关ZIP支持的任何努力吗?其他想法?
我假设make在构建软件的过程中涉及或类似的构建系统.我将zip文件放在存储库中,并在Makefile中添加一条规则,以便在实际构建开始之前将其解压缩.
例如,假设您的zip文件位于"external/boost.zip"的源树中,它应被解压缩为"external/boost",并在其顶层包含一个文件"boost_version.h".
# external/Makefile
unpack_boost: boost/boost_version.h
boost/boost_version.h: boost.zip
unzip $<
Run Code Online (Sandbox Code Playgroud)
我不知道unzip调用的确切语法,请向您的联机帮助页询问.
然后在其他Makefile中,您可以让源文件依赖于unpack_boost目标,以便make在编译源文件之前解压缩Boost.
# src/Makefile (excerpt)
unpack_boost:
make -C ../external unpack_boost
source_file.cpp: unpack_boost
Run Code Online (Sandbox Code Playgroud)
如果您正在使用Makefile生成器(或完全不同的构建系统),请查看这些程序的文档,了解如何创建类似自定义目标的内容unpack_boost.例如,在CMake中,您可以使用add_custom_command指令.
小字:该boost/boost_version.h文件不是绝对必要的Makefile文件的工作.你可以把unzip命令放到unpack_boost目标中,但是目标实际上是虚假的,即:它将在每次构建期间执行.中间文件(当然,您需要替换为zip存档中实际存在的文件)确保unzip仅在必要时运行.
一年前,我和你在同一个位置.我们将源代码保留在SVN中,更糟糕的是,在我们自己的代码中包含与同一存储库(相同分支)的boost.试图在多个分支上工作是不可能的,因为一天大部分时间都需要检查一份新的工作副本.将升级转移到单独的供应商存储库有所帮助,但结账仍需要数小时.
我把团队换成了git.为了让您了解它比SVN好多少,我刚刚创建了一个包含boost 1.45.0版本的存储库,然后通过网络克隆它.(克隆会复制所有存储库历史记录,在本例中为单个提交,并创建工作副本.)
那个克隆花了六分钟.
在前六秒内,存储库的压缩副本被复制到我的机器上.其余的时间花在写所有这些小文件上.
我衷心建议你试试git.学习曲线很陡,但我怀疑在克隆一个boost副本所需的时间内,你会得到很多预编译器黑客攻击.
| 归档时间: |
|
| 查看次数: |
768 次 |
| 最近记录: |