gpt4 book ai didi

c++ - 简单高效的C++/Boost源码分发(合并)

转载 作者:可可西里 更新时间:2023-11-01 18:18:09 24 4
gpt4 key购买 nike

我的工作主要是工程分析,但我发现自己越来越频繁地在同事之间分发代码。一个很大的痛苦是并不是每个用户都精通编译源代码的复杂性,而且我无法分发可执行文件。

我一直在使用 Boost 使用 C++,问题是我无法请求每个网络的每个系统管理员安装这些库。相反,我想分发单个源文件(或尽可能少的源文件),以便用户可以 g++ source.c -o program

因此,问题是:您能否将 Boost 库与您的代码打包,并以单个文件结束?我说的是“仅 header ”或“仅模板”的 Boost 库。

作为灵感,请看SQlite的分布或 Lemon Parser Generator ;作者将这些东西合并到一个源文件中,编译起来很简单。

谢谢。

编辑:

A related question in SO适用于 Windows 环境。我在 Linux 中工作。

最佳答案

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

关于c++ - 简单高效的C++/Boost源码分发(合并),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2876535/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com