2009년 3월 30일 월요일

ubuntu, cmake, boost

ubuntu 가 짱나는게 개발툴들이 버전업이 느리다는거.
결국 ppa 를 찾거나 직접 빌드해서 설치해야 하는데
둘다 기분좋은 일은 아니다.

어쨌건 boost 를 쓰게 되기까지의 과정들
  • boost 는 1.38 가져다 직접 빌드. bjam 오랜만에 써보니 인자들이 기억이 안나서 당황. ubuntu 패키지 시스템과 충돌을 피하려고 ~/boost 를 prefix 로 해서 깔았는데 이게 모든 삽질의 시작이 되었다.
  • intrepid 의 cmake 가 boost 1.38 을 지원하지 않는 버전.. 후럴... ~/boost 아래 깔린 boost 라이브러리를 못찾는 문제가 있더라. https://launchpad.net/~pgquiles/+archive/ppa 추가해서 설치. 근데 이친구는 굉장히 많은 패키지를 제공하네.
  • CMakeLists.txt 에 아래 매크로를 추가해줬다. 간단히 테스팅용도로 쓰는거니 매번 타이핑하는건 번거롭지. 처음안 아예 링크까지 매크로안에 포함시켜벼렸는데 그건 좀 그래서 다시 뺐다.
  • 음. 그런데 매크로 짜는게 쉽지 않았다. cmake 스크립트가 워낙 졸렬해서..
    # 간단히 만들어본 boost 사용
    # 최상위 CMakeLists.txt 에서
    #
    # use_boost(1.38 system date_time filesystem)
    #
    # 식으로 버전적은후 필요한 컴퍼넌트들을 줄줄이 적으면 된다.
    # foo 라는 바이너리에 부스트 라이브러리들을 링크할때는
    #
    # target_link_libraries(foo ${Boost_LIBRARIES})
    #
    # 요리 적으면 된다. 정말 편히 쓰려면 아예 link_libraries 를 박아도
    # 되고.
    macro(use_boost ver)
    set(Boost_USE_STATIC_LIBS ON)
    set(Boost_USE_MULTITHREAD ON)

    # 아오 짱나. cmake 문법은 정말 드럽군. &rest 같은놈이 없어서 ARGV 를
    # 복사하고 앞대가리를 뽑아냈다. 달랑 이거 몇줄 때문에 시간 꽤나 날아갔네.
    set(components ${ARGV})
    list(REMOVE_AT components 0)

    find_package(Boost ${ver} EXACT COMPONENTS ${components})
    if(Boost_FOUND)
    include_directories(${Boost_INCLUDE_DIRS})
    endif()
    endmacro(use_boost)


음.. 위 매크로가 추가되면서 내가 자주 써먹는 misc.cmake 는 모양이 이렇게 됐네. 보통 최상위 CMakeLists.txt 에서 이걸 인클루드 하도록 하고 쓰는게 내 현재 개발취향

펼쳐두기..



PS
아..
환경변수에서 BOOST_ROOT 잡는거 잊지 말자.

PS.
오랜만에 C++ 에 boost 까지 써먹으니 빌드속도 쩌는구먼.
아 답답해







댓글 없음: