2008년 10월 8일 수요일

cmake 에서 한벌의 소스로 디파인만 달리해가면서 여러개의 바이너리를 뽑는 방법. COMPILE_DEFINITIONS 속성!

  • 참고링크는 생략 이넘들 버전업이 빠르니.. 그냥 http://www.cmake.org 에서 문서 링크 찾아보자.

제목대로 한벌의 소스로 디파인만 바꿔가면서 바이너리를 뽑아보려고 했는데
add_definitions 가 타겟별로 cflags 를 맥여주는놈이 아니라 좀 난감했다.

적당히 검색해보니 COMPILE_DEFINITIONS 라는게 있네!! 전에는 못봤던거 같은데.. 버전올라가면서 생긴건가.. 어쨌건 이놈을 쓰면 타겟별로 디파인을 달리 주는게 가능해진다.

문서에서 저놈의 존재를 보고 막연히 set_target_properties 로 세팅하면 되겠구나 했더니 안되더라.. 구글링 해보니 set_property 를 쓰더만.. 아 씨바.. 존나 땜질식의 문법.. 나중에 이런기능이 필요하면 다시 삽질할게 뻔하니 적어둔다.

아 추가로 문서보는게 더 빠르지만.. COMPILE_DEFINITIONS_<CONFIG> 식으로 빌드타입(디버그냐 릴리즈냐..)에 따라 알아서 물게 뜨도록 할수도 있다.

cmake_minimum_required(VERSION 2.6)

# 지금 이 디렉토리내의 코드들은 는 project(brpc) 라고 선언된 다른
#
디렉토리의 라이브러리를 쓰고있다.
include_directories(${brpc_SOURCE_DIR})
link_directories(${brpc_BINARY_DIR})

# 컴파일할 소스들
# 내 원래는 그냥 add_executable 안에 줄줄이 나열하는걸 더 좋아하지만
# 소스 한벌을 여러번 써야 하니 변수에 일단 넣어둬야겠지.
set(srcs
main.c
dispatch.c
session.c
methodtable.c
bpacket.c
mac.c
handshake.c
brpc.c
ping.c
env.c
proc.c)

# 로그켠놈을 빌드해보자.
# 그냥 지금까지 쓰던 그대로지. 코드안에서 기본적으로
# ENABLE_LOG_MACROS 을 1 로 정의하는 코드가 있기 때문.
# 사실 명시적으로 여기에도 추가하는게 좋겠지.
add_executable(main ${srcs})
target_link_libraries(main tcp util benc)

# 로그끈놈을 빌드해보자.
# 달리 설명이 필요없지. 저 더러운 set_property 신택스를 보자. 글고
# COMPILE_DEFINITIONS 에 "/DFOO" 식으로 주면 에러난다. "FOO" 로 줘야만
# 한다. 처음에 이렇게 줬다가 오묘한 에러를 내주길래 시간만 버렸다.
add_executable(main.silence ${srcs})
set_property(TARGET main.silence APPEND PROPERTY COMPILE_DEFINITIONS "ENABLE_LOG_MACROS=0")
target_link_libraries(main.silence tcp util benc)




댓글 없음: