我从Github上git clone boost master分支上的最新源代码。我试图建立但失败了,
$ ./bootstrap.sh
./bootstrap.sh: line 188: ./tools/build/src/engine/build.sh: No such file or directory
-n Building Boost.Build engine with toolset ...
Failed to build Boost.Build build engine
Consult 'bootstrap.log' for more details
bootstrap.log
1 ./bootstrap.sh:218行:cd:./tools/build/src/engine:没有这样的文件或目录
问题:
我知道没有./tools/build/src/engine
,我该如何解决这个问题?我也注意到了
-n使用工具集构建Boost.Build引擎......
但是,bootstrap.sh
没有-n
选项。
我的发展环境:
MacOS X10.9
Xcode5.1
答案 0 :(得分:15)
直接从Git仓库构建的当前文档位于Getting Started。基本上还有一些额外的步骤来创建包含目录树并运行构建本身。另请注意,请确保使用克隆存储库中的b2
命令。不是你系统中预装的任何东西。
答案 1 :(得分:10)
要从GitHub查看最新版本的 Boost 库,请执行以下操作:
git clone --single-branch --branch master --depth=1 https://github.com/boostorg/boost.git
。cd boost/
git submodule update --init --recursive --remote --no-fetch --depth=1
。如果出现以下错误:
Cloning into 'libs/predef'...
remote: Counting objects: 243, done.
remote: Compressing objects: 100% (163/163), done.
remote: Total 243 (delta 128), reused 126 (delta 70), pack-reused 0
Receiving objects: 100% (243/243), 142.82 KiB | 209.00 KiB/s, done.
Resolving deltas: 100% (128/128), done.
Checking connectivity... done.
fatal: Needed a single revision
Unable to find current origin/master revision in submodule path 'libs/predef'
然后使用脚本(reget.bash
):
#! /usr/bin/env bash -vex
rm -rf $3/$1 .git/modules/$1
git clone --depth=1 --branch=$2 --single-branch --separate-git-dir .git/modules/$1 https://github.com/boostorg/$1 $3/$1
其中$1
为predef
,$2
为master
,$3
为libs
,即运行bash reget.bash predef master libs
。
对于不同的子模块,可能会多次出现错误,只需使用上面的脚本来清理不可恢复的git错误并检查最新的失败子模块提交。然后重用git submodule update --init --recursive --remote --no-fetch --depth=1
。
完成所有子模块的检出后,构建b2
可执行文件。对于 clang ,它看起来像:
export CC=clang
export CFLAGS="-march=native -Ofast"
export CXX=clang++
export CXXFLAGS="-march=native -Ofast"
bash bootstrap.sh --with-toolset=clang
您已获得b2
个可执行文件。用它来构建整个 Boost :
sudo ./b2 -j`nproc` toolset=clang --build-dir=/tmp/build-boost --without-mpi install
如果您只想克隆 boost 的HEAD
及其所有子模块的HEAD
S,那么您可以使用以下 Lua 脚本(在https://github.com/boostorg/boost.git
存储库上测试):
-- mkdir boost ; cd boost ; lua ../git-submodules-clone-HEAD.lua https://github.com/boostorg/boost.git .
local module_url = arg[1] or 'https://github.com/boostorg/boost.git'
local module = arg[2] or module_url:match('.+/([_%d%a]+)%.git')
local branch = arg[3] or 'master'
function execute(command)
print('# ' .. command)
return os.execute(command)
end
-- execute('rm -rf ' .. module)
if not execute('git clone --single-branch --branch master --depth=1 ' .. module_url .. ' ' .. module) then
io.stderr:write('can\'t clone repository from ' .. module_url .. ' to ' .. module .. '\n')
return 1
end
-- cd $module ; git submodule update --init --recursive --remote --no-fetch --depth=1
execute('mkdir -p ' .. module .. '/.git/modules')
assert(io.input(module .. '/.gitmodules'))
local lines = {}
for line in io.lines() do
table.insert(lines, line)
end
local submodule
local path
local submodule_url
for _, line in ipairs(lines) do
local submodule_ = line:match('^%[submodule %"([_%d%a]-)%"%]$')
if submodule_ then
submodule = submodule_
path = nil
submodule_url = nil
else
local path_ = line:match('^%s*path = (.+)$')
if path_ then
path = path_
else
submodule_url = line:match('^%s*url = (.+)$')
end
if submodule and path and submodule_url then
-- execute('rm -rf ' .. path)
local git_dir = module .. '/.git/modules/' .. path:match('^.-/(.+)$')
-- execute('rm -rf ' .. git_dir)
execute('mkdir -p $(dirname "' .. git_dir .. '")')
if not execute('git clone --depth=1 --single-branch --branch=' .. branch .. ' --separate-git-dir ' .. git_dir .. ' ' .. module_url .. '/' .. submodule_url .. ' ' .. module .. '/' .. path) then
io.stderr:write('can\'t clone submodule ' .. submodule)
return 1
end
path = nil
submodule_url = nil
end
end
end
答案 2 :(得分:6)
我真的错过了文档的一些重要部分:.\b2 headers
。接下来我要完成构建thread
,chrono
和date-time
的所有操作,从版本1.60.0开始发布和调试(静态和共享),从GitHub repo克隆(在Windows机器中):
git clone --recursive https://github.com/boostorg/boost.git
cd boost
git checkout boost-1.60.0
git submodule update
bootstrap.bat
.\b2.exe headers
.\b2.exe variant=release,debug link=static,shared address-model=32 architecture=x86 --with-thread --with-chrono --with-date_time --stagedir=stage\win32 stage
.\b2.exe variant=release,debug link=static,shared address-model=64 architecture=x86 --with-thread --with-chrono --with-date_time --stagedir=stage\x64 stage
不要忘记:
.\b2.exe headers