boost, 저도 참 좋아하는데요...
제가 한 번 먹.. 써보도록 하겠습니다.
일단 링크를...
친절하게 설명된 내용이 있어 알았음.
간략히 순서를 정리하자면 다음과 같다.
앵간한거는 걍 include해서 써도 되지만 일부 library는 빌드가 반드시 필요하다고 한다.
어디선가 봤는데 어딘지는 모르겠고.. 영어 해석은 잘 안 되고.. 후..
걍 줴다 만들자.
1. boost library를 받는다.
windows용은 확장자가 zip인 것을 받아야 한다. zip이 windows용이다. 이 내용 어디서 봤는데.. 어디서 봤더라?
받았으면 압축을 풀고 준비.
2. bjam.exe와 b2.exe를 만들어야 하니까 bootstrap.bat을 실행한다.
bjam은 로 부스트 컴파일을 위한 jamfile parser로 뭐라뭐라 했는데.. 까묵 ㅠㅠ
bjam.exe --help를 치면 도움말 나온다.
b2.exe도 동일하게 나온다. 내부적으로 bjam을 사용하나보다.
C:\boost\boost_1_53_0> bjam.exe --help
Boost.Build 2011.12-svn
Project-specific help:
Project has jamfile at Jamroot
Usage:
bjam [options] [properties] [install|stage]
Builds and installs Boost.
Targets and Related Options:
install Install headers and compiled library files to the
======= configured locations (below).
--prefix=<PREFIX> Install architecture independent files here.
Default; C:\Boost on Win32
Default; /usr/local on Unix. Linux, etc.
--exec-prefix=<EPREFIX> Install architecture dependent files here.
Default; <PREFIX>
--libdir=<DIR> Install library files here.
Default; <EPREFIX>/lib
--includedir=<HDRDIR> Install header files here.
Default; <PREFIX>/include
stage Build and install only compiled library files
===== to the stage directory.
--stagedir=<STAGEDIR> Install library files here
Default; ./stage
Other Options:
--build-type=<type> Build the specified pre-defined set of variations
of the libraries. Note, that which variants get
built depends on what each library supports.
minimal (default) - Builds a minimal set of
variants. On Windows, these are static
multithreaded libraries in debug and release
modes, using shared runtime. On Linux, these
are static and shared multithreaded libraries
in release mode.
complete - Build all possible variations.
--build-dir=DIR Build in this location instead of building
within the distribution tree. Recommended!
--show-libraries Displays the list of Boost libraries that require
build and installation steps, then exit.
--layout=<layout> Determines whether to choose library names
and header locations such that multiple
versions of Boost or multiple compilers can
be used on the same system.
versioned - Names of boost binaries
include the Boost version number, name and
version of the compiler and encoded build
properties. Boost headers are installed in a
subdirectory of <HDRDIR> whose name contains
the Boost version number.
tagged -- Names of boost binaries include the
encoded build properties such as variant and
threading, but do not including compiler name
and version, or Boost version. This option is
useful if you build several variants of Boost,
using the same compiler.
system - Binaries names do not include the
Boost version number or the name and version
number of the compiler. Boost headers are
installed directly into <HDRDIR>. This option
is intended for system integrators who are
building distribution packages.
The default value is 'versioned' on Windows, and
'system' on Unix.
--buildid=ID Adds the specified ID to the name of built
libraries. The default is to not add anything.
--python-buildid=ID Adds the specified ID to the name of built
libraries that depend on Python. The default
is to not add anything. This ID is added in
addition to --buildid.
--help This message.
--with-<library> Build and install the specified <library>
If this option is used, only libraries
specified using this option will be built.
--without-<library> Do not build, stage, or install the specified
<library>. By default, all libraries are built.
Properties:
toolset=toolset Indicates the toolset to build with.
variant=debug|release Select the build variant
link=static|shared Whether to build static or shared libraries
threading=single|multi Whether to build single or multithreaded binaries
runtime-link=static|shared
Whether to link to static or shared C and C++ runtime.
Configuration help:
Configuration file at C:\boost\boost_1_53_0\tools\build\v2
user-config.jam
This file is used to configure your Boost.Build installation. You can modify
this file in place, or you can place it in a permanent location so that it
does not get overwritten should you get a new version of Boost.Build. See:
http://www.boost.org/boost-build2/doc/html/bbv2/overview/configuration.html
for documentation about possible permanent locations.
General command line usage:
bjam [options] [properties] [targets]
Options, properties and targets can be specified in any order.
Important Options:
* --clean Remove targets instead of building
* -a Rebuild everything
* -n Don't execute the commands, only print them
* -d+2 Show commands as they are executed
* -d0 Supress all informational messages
* -q Stop at first error
* --debug-configuration Diagnose configuration
* --debug-building Report which targets are built with what properties
* --debug-generator Diagnose generator search/execution
Further Help:
The following options can be used to obtain additional documentation.
* --help-options Print more obscure command line options.
* --help-internal Boost.Build implementation details.
* --help-doc-options Implementation details doc formatting.
...found 1 target...
--toolset=msvc-10.0
: Visual Studio 2010 을 이용해 컴파일함을 알려준다. 다른 버전을 사용할 경우에는 그에 맞는 버전을 지정하면 된다.
--architecture=x86
: 아키텍쳐를 지정한다. x86이나, x64라면 디폴트 값으로 x86으로 지정되고 IA64의 경우에는 --architecture=ia64
address-model=64
: 주소 모델을 지정한다. x64로 빌드할것이므로 64 를 지정한다. 지정안한다면 32가 디폴트 값으로 사용된다.
link=static
: 어떤 형태로 빌드할 것인지 나타낸다. static(lib), shared(dll) 두가지 옵션이 있다. link=static,shared 로 둘다 지정도 가능
runtime-link=static,shared
: 사용하는 C - Runtime Library 를 어떻게 연결할 것인지를 나타낸다. 나는 둘 다 지정했다.
variant=release
: 빌드된 라이브러리가 릴리즈용인지, 디버그 용인지를 나타낸다. variant=release,debug 와 같이 지정도 가능.
--without=mpi
--without=python
: 부스트 라이브러리는 사용을 위해 또 다른 라이브러리가 이미 설치 되 있어야 하는 경우도 있다. MPI 가 그 경우.
나는 MPI와 파이썬을 사용하지 않으므로 둘 다 빌드하지 않겠다는 옵션을 주었다.
--stagedir=stage64_lib_release
: 빌드된 라이브러리들이 위치 할 폴더. %BOOSTROOT% \ %STAGEDIR% 에 생성된다.
stage
: Stage 옵션. 헤더파일을 제외하고 라이브러리만 생성한다.
-j 2
: 쓰레드를 이용해 동시에 몇개의 작업을 할 것인가, 이경우는 두개의 작업을 동시에 하겠다고 옵션을 주었다.
bjam 사용법 중 다음이 중요하다.
stage는 빌드된 라이브러리 파일만 설치한다.
install 옵션은 시간도 오래 걸리고 용량도 냠냠 하니까 stage를 권장.
3. 급하다! 결론만 간단히!
Visual Studio 컴파일러를 이용해 빌드해야 하니까 원하는 버전의 command prompt를 실행한다.
그담은 boost root 경로로 이동해서 아래와 같이 실행하면 된다.
x86
b2 toolset=msvc-9.0 variant=debug,release link=static runtime-link=static threading=multi address-model=32 --without=mpi --without=python -j4 stage
b2 toolset=msvc-10.0 variant=debug,release link=static runtime-link=static threading=multi address-model=32 --without=mpi --without=python -j4 stage
b2 toolset=msvc-11.0 variant=debug,release link=static runtime-link=static threading=multi address-model=32 --without=mpi --without=python -j4 stage
x64
b2 toolset=msvc-9.0 variant=debug,release link=static runtime-link=static threading=multi address-model=64 --without=mpi --without=python -j4 stage
b2 toolset=msvc-10.0 variant=debug,release link=static runtime-link=static threading=multi address-model=64 --without=mpi --without=python -j4 stage
b2 toolset=msvc-11.0 variant=debug,release link=static runtime-link=static threading=multi address-model=64 --without=mpi --without=python -j4 stage
4. 빌드된 boost library를 보면 이름이 뭐 이따위야 싶은데 네이밍 규칙이 있단다.
하.. 영어.. 요것도 퍼옴 ㅠㅠ
boost
: 이 파일이 link=shared 옵션으로 생성된 DLL 파일임을 나타낸다. LIB 파일이라면 libboost 로 시작한다.
libboost
: 이 파일이 link=static 옵션으로 생성된 LIB 파일임을 나타낸다.
data_time
: 라이브러리 이름을 나타낸다
vc100
: 컴파일하는데 사용된 툴과 버전을 나타낸다. vc 10.0 버전을 사용하였다.
mt
: 이 멀티 쓰레드용 부스트 라이브러리임을 나타낸다.
s
: runtime-link=static 옵션으로 C - Runtime Library 가 static 으로 링크 되었음을 알려준다.
g
: variant:debug 옵션으로 C - Runtime Library 가 디버그 버전으로 링크 되었음을 알려준다.
d
: variant:debug 옵션으로 이 부스트 라이브러리가 디버거 버전으로 컴파일 되었음을 알려준다.
1_46_1
: 부스트 라이브러리의 버전을 알려줌
LIB 파일들을 정리해보면,
libboost_mt
: 멀티 쓰레드용 릴리즈 버전, C Runtime Library 는 shared 방식으로 링크됨. 비주얼 스튜디오 /MT 옵션용 라이브러리
libboost_mt_gd
: 멀티 쓰레드용 디버그 버전, C Runtime Library 는 shared 방식으로 링크됨. 비주얼 스튜디오 /MTd 옵션용 라이브러리
libboost_mt_s
: 멀티 쓰레드용 릴리즈 버전, C Runtime Library 는 static 방식으로 링크됨. 비주얼 스튜디오 /MD 옵션용 라이브러리
libboost_mt_sgd
: 멀티 쓰레드용 디버그 버전, C Runtime Library 는 static 방식으로 링크됨. 비주얼 스튜디오 /MDd 옵션용 라이브러리
자.. 이제 준비 다 됨.
빌드된 라이브러리가 필요할 경우엔 stage 경로를 설정해주면 된다.