Loading
2022. 2. 19. 23:12 - lazykuna

Boost.build와 jam build system

boost 를 빌드할 때 우리는 흔히 ./b2를 수행했을 것이다. 이는 내부적으로 Boost.Build를 수행하게 되며, 그 안에서는 또 내부적으로 boost jam build를 사용한다. bootstrap.sh 안에 들어있는 BJAM... 으로 시작하는 값들이 그 흔적이다.

그런데 해당 빌드 시스템은 boost 이외에서는 거의 쓰이지도 않는 것 같고, 또 찾아보니 히스토리가 꽤 오래된 것에 비해 문서화된 내용은 상당히 빈약해 보였다. 어떤 녀석인지 궁금해서 조금 찾아 정리해 보았다.

Introduction

먼저 Boost.Build 홈페이지에 들어가보면, 아래와 같이 소개하고 있다.

Boost.Build makes it easy to build C++ projects, everywhere.
You name your executables and libraries and list their sources. Boost.Build takes care about compiling your sources with right options, creating static and shared libraries, making executables, and other chores — whether you're using gcc, msvc, or a dozen more supported C++ compilers — on Windows, OSX, Linux and commercial UNIX systems.

간편성호환성, 그리고 Standalone 이라는 점을 강점으로 이야기하고 있는 것으로 보인다. Makefile 에서 추가적으로 다 지정해 줘야 하는 것들을 자동으로 해 주는 간편성은 물론이고, boost가 일종의 standard library처럼 쓰일목적으로 만들어진 만큼, 다른 빌드 플랫폼 종속적이라는 건 귀찮아지는 일이니 그럭저럭 합리적이다.

Boost.Build Tutorial이 있어 찾아보니, Build process는 주로 b2 interpreter가 Jamfiles를 읽어 수행한다고 되어 있다. 물론, Jamfile 안에는 Makefile 처럼 빌드 명세에 대한 정보가 들어 있다. 어떤 식으로 작성하는지는 Boost Documentation 를 참조할 수 있다.

History

그런데 보다 보니 이 Jam build interpreter가 꽤 오래전부터 있었던 물건 같다. 정확히는, BJAM이라는 것이 있었고, 이게 Boost.build로 바뀐 것 같다.

Boost에 Boost Jam 3.1.18 Hidden Link가 있는데, 아래와 같이 쓰여 있다.

After years of bjam developments.. This is going to be the last unbundled release of the 3.1.x series. From this point forward bjam will only be bundled as part of the larger Boost Build system. And hence will likely change name at some point.
즉 이 시점으로 하여금 bjam의 명칭이 변경되며(b2) boost.build 시스템 안에 추가된 것으로 보인다.

무려 Jam Documentation도 살아 있었다. 비록 몹시 빈약하게 문서화 되어있지만. 아마 저 버전이 Boost.Build가 되기 전 마지막 것으로 보인다.

그런데, 더 과거의 Boost.Jam Documentation을 보면, 아래와 같은 글이 쓰여 있다.

Boost.Jam (BJam) is a build tool based on FTJam, which in turn is based on Perforce Jam. It contains significant improvements made to facilitate its use in the Boost Build System, but should be backward compatible with Perforce Jam.
그러니까, Perforce Jam으로부터 분기하여 Boost.Jam이 또 탄생한 것이다.

Perforce Jam은 Perforce Software에서 개발한 빌드 시스템이다. 나름 당시 Hot한 물건이었는지 변형도 꽤 있는 것으로 보인다. (출처: Wikipedia)
Perforce software 사이트를 들어가 보면 해당 제품이 누락된 것으로 보이지만, Perforce Workshop 라는 hidden link에서 아직 프로젝트를 보존하고 있는 것으로 보인다.

정리하면 대략 이런 케이스네..?

Perforce Jam --> Boost.Jam (BJam) --> Boost.Build

간편성, 호환성, 독립실행이라는 이점을 챙기고자 하는 건 예전과 동일하지만 언어는 내부적으로 많이 바뀌어 있는 것으로 보인다. Boost.Build 시스템 안의 Jam interpreter에는 없는 문법과 기능들이 많이 생겨있는 듯.

역사가 어느정도 있고 아직 쓰이고 있는 빌드 시스템이라는 것 치고 뭔가 너무 정보가 이리저리 흩어져 있고 명맥도 끊어진 듯 만듯 하여 이렇게 한번 정리해 봄...