CMake

CMake(Cross Platform Make)는 멀티플랫폼으로 사용할 수 있는 Make의 빌드관리시스템을 만들기 위한 오픈소스 프로젝트로 키트웨어와 인사이트 콘솔티엄에서 만들었다. 스스로 기존의 Make의 과정을 수행하지는 않고 지정한 운영 체제에 맞는 Make 파일(마이크로소프트 윈도우에서는 솔루션 파일)의 생성 및 관리만을 수행하기 때문에 Meta Make라고도 불리우는 빌드 자동화(automation 또는 makemake)시스템이다. 가장 큰 이점은 유닉스 계열 OS 중심이던 기존의 Make의 빌드(build) 시스템과는 달리 한번 작성해 두면 유닉스 계열은 물론, 마이크로소프트 윈도 계열의 프로그래밍 도구도 지원한다는 것이다.

기능 
 소프트웨어 빌드에 특화된 언어로 독자적 설정 스크립트를 사용한다.
 C, C++, 자바, 포트란에 대해서는 자체적으로 의존 관계를 분석할 수 있다.
 스위그, Qt 지원에 특화되어 있다.
 마이크로소프트 비주얼 스튜디오를 자체적으로 지원한다(6, 7, 7.1, 8.0, 9.0 등).
 이클립스용 빌드 파일을 생성할 수 있다.
 타임스탬프를 통해 파일 내용의 변화를 알아낼 수 있다.
 평행 빌드를 할 수 있다.
 크로스 컴파일을 할 수 있다.
 다양한 플랫폼을 지원한다.
 유닉스 계열 운영 체제(리눅스, BSD계 운영 체제 등)
 OS X
 윈도우 95/98/NT/2000/XP와 MinGW/MSYS
 내부 모듈인 CTest로 유닛 테스트를 수행할 수 있다.
 내부 모듈인 CPack으로 자동 인스톨러를 만들 수 있다.

CMake 파일 예제 

if (${UNIX})
  set (DESKTOP $ENV{HOME})
else()
  set (DESKTOP $ENV{USERPROFILE}/Desktop)
endif()

set (PRJ ${DESKTOP}/common/svn )
set (FILELIST ${PRJ}/src/source.txt )

message(STATUS "CMAKE_GENERATOR : ${CMAKE_GENERATOR}")
message(STATUS "DESKTOP : ${DESKTOP}")
message(STATUS "PRJ : ${PRJ}")
message(STATUS "FILELIST : ${FILELIST}")
message(STATUS "SYSTEM_NAME : ${CMAKE_SYSTEM_NAME}")

project(project_name)

include_directories(
  ${PRJ}/src
  ${PRJ}/includes
)

# Load SRC Variable from file
file(READ ${FILELIST} SRC)
string(REGEX REPLACE "#.*$" "" SRC ${SRC})
string(REPLACE "\n" ";" SRC ${SRC})

add_executable(${PROJECT_NAME} ${SRC} )

foreach (f ${SRC})
  set_source_files_properties(${f} PROPERTIES LANGUAGE       CXX)
endforeach(f)

if (${WIN32})
  link_directories(
  )

  add_definitions(
    -DDEFINE1
  )

  target_link_libraries(
    ${PROJECT_NAME}
    wsock32.lib
  )
endif()

CMake를 채택한 프로젝트 
 KDE(4판부터)
 LMMS
 MySQL(마이크로소프트 윈도우, 리눅스)
 OpenLieroX
 OpenSceneGraph
 OpenSourceComputerVision
 SuperTux
 VTK
 뮤즈스코어
 스크리버스
 스텔라리움
 퀀텀 GIS
 포플러 - Autoconf와 CMake를 함께 지원
 헷지워즈
 [Radio|GNU Radio]

같이 보기 

 Autoconf
 qmake

참조

외부 링크 
  CMake 공식 사이트

빌드 자동화
컴파일 도구
BSD 라이선스 소프트웨어