Esc*_*alo 7 c++ boost software-distribution amalgamation
我的工作主要是工程分析,但我发现自己在同事中越来越频繁地分发代码.一个巨大的痛苦是并非每个用户都精通编译源代码的复杂性,而且我无法分发可执行文件.
我一直在使用Boost使用C++,问题是我无法请求每个网络的每个sysadmin安装库.相反,我想分发一个源文件(或尽可能少),以便用户可以g++ source.c -o program.
所以,问题是:你能用你的代码打包 Boost库,最终得到一个文件吗?我在谈论Boost库,它们只是"标题"或"仅模板".
作为灵感,请查看SQlite或Lemon Parser Generator的分布情况; 作者将这些东西合并为一个单独的源文件,这对于编译来说是微不足道的.
谢谢.
编辑:
Kei*_*thB 11
有一个带有boost的实用程序bcp,它可以扫描你的源并提取从boost源使用的任何boost头文件.我已经设置了一个脚本,将这个提取到我们的源代码树中,这样我们就可以将我们需要的源和代码打包在一起.它还会复制我们使用的几个只有头文件的boost库的boost源文件,然后直接编译到我们的应用程序中.
这只做了一次,然后任何使用代码的人都不需要知道它取决于boost.这是我们使用的.它还将构建bjam和bcp,如果它们尚未构建的话.
#!/bin/sh
BOOST_SRC=.../boost_1_43_0
DEST_DIR=../src/boost
TOOLSET=
if ( test `uname` = "Darwin") then
TOOLSET="--toolset=darwin"
fi
# make bcp if necessary
if ( ! test -x $BOOST_SRC/dist/bin/bcp ) then
if ( test -x $BOOST_SRC/tools/jam/*/bin.*/bjam ) then
BJAM=$BOOST_SRC/tools/jam/*/bin.*/bjam
else
echo "### Building bjam"
pushd $BOOST_SRC/tools/jam
./build_dist.sh
popd
if ( test -x $BOOST_SRC/tools/jam/*/bin.*/bjam ) then
BJAM=$BOOST_SRC/tools/jam/*/bin.*/bjam
fi
fi
echo "BJAM: $BJAM"
pushd $BOOST_SRC/tools/bcp
echo "### Building bcp"
echo "$BJAM $TOOLSET"
$BJAM $TOOLSET
if [ $? == "0" ]; then
exit 1;
fi
popd
fi
if ( ! test -x $BOOST_SRC/dist/bin/bcp) then
echo "### Couldn't find bpc"
exit 1;
fi
mkdir -p $DEST_DIR
echo "### Copying boost source"
MAKEFILEAM=$DEST_DIR/libs/Makefile.am
rm $MAKEFILEAM
# Signals
# copy source libraries
mkdir -p $DEST_DIR/libs/signals/src
cp $BOOST_SRC/libs/signals/src/* $DEST_DIR/libs/signals/src/.
echo -n "boost_sources += " >> $MAKEFILEAM
for f in `ls $DEST_DIR/libs/signals/src | fgrep .cpp`; do
echo -n "boost/libs/signals/src/$f " >> $MAKEFILEAM
done
echo >> $MAKEFILEAM
echo "### Extracting boost includes"
$BOOST_SRC/dist/bin/bcp --scan --boost=$BOOST_SRC ../src/*/*.[Ch] ../src/boost/libs/*/src/*.cpp ../src/smart_assert/smart_assert/priv/fwd/*.hpp $DEST_DIR
if [ $? != "0" ]; then
echo "### bcp failed"
rm -rf $DEST_DIR
exit 1;
fi
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2172 次 |
| 最近记录: |