Open Source/cmake

[cmake] 2. Hello

소혼 2011. 4. 12. 22:44
반응형
[목차로 이동]

정말 간단한 CMake 예제를 만들어보려고 합니다.

먼저 CMake가 빌드 스크립트 이므로, 빌드를 하는데 사용할 소스 코드를 준비해봅니다.
# cat hello.cpp
#include <iostream>

int main()
{
    std::cout << "hello" << std::endl;
    return 0;
}

파일 하나 이므로 간단히 아래와 같이 컴파일해도 아무런 문제가 없습니다.
g++ -o hello hello.cpp

CMake 파일을 만들어봅시다.
# cat CMakeLists.txt
PROJECT(hello)
ADD_EXECUTABLE(hello hello.cpp)

PROJECT는 해당 CMake가 빌드할 프로젝트명을 지정합니다. 원하시는 이름을 지정하면 됩니다.
ADD_EXECUTABLE은 실행파일을 만들겠다는 의미입니다. 첫번째 인자는 실행 파일 명 두번째 인자는 소스파일(들)입니다.

저장하고 난 후 cmake 를 수행합니다.
# cmake .
-- The C compiler identification is GNU
-- The CXX compiler identification is GNU
-- Check for working C compiler: /usr/bin/gcc
-- Check for working C compiler: /usr/bin/gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Configuring done
-- Generating done
-- Build files have been written to: /workspace/study/cmake/1.hello

뭔가 막 하지만 실제로 하는 건 별로 없습니다. CMakeCache를 포함해 make 파일이 생성될 것입니다.
cmake를 실행할 때 추가로 넘겨주는 .은 CMakeLists.txt가 있는 폴더의 위치를 지정하면 됩니다.

make를 실행하면 위에서 ADD_EXECUTABLE 에서 지정한 파일이 생성됩니다.
# make

TIP" 이렇게 실행하면 소스가 있는 폴더가 지저분해집니다. 그래서 전 폴더를 추가해서 그 안에서 빌드를 수행합니다.
# mkdir build
# cd build
# cmake ..
make
 

어차피 중요한 것은 CMakeLists.txt 파일이 있는 곳이기 때문입니다. 
 
이렇게 간단한 예제에서는 cmake의 장점이 사실 잘 보이지 않습니다. 하지만 어쨌든 Makefile을 작성해보신 분이라면 상당히 빌드 스크립트가 간단히 만들어짐을 아실 수 있으리라 생각됩니다.
 
별 건 아니지만, ADD_EXECUTABLE의 역할을 확인하기 위해 Hello의 예제에 foo라고 하는 실행 파일을 만들어볼까 합니다.
실제로 써먹을 일은 별로 없겠지만 hello와 foo 두개의 바이너리를 하나의 프로젝트로 생성할 것입니다.

helloc.cpp에 이어 foo.cpp를 준비합니다. 별 차이 없으므로 따로 적지 않습니다. 
CMakeLists.txt를 아래와 같이 수정합니다.
PROJECT(hello)
ADD_EXECUTABLE(hello hello.cpp)
ADD_EXECUTABLE(foo foo.cpp)  

두개의 실행파일이 생긴 것을 확인할 수 있습니다.
# ls
CMakeCache.txt  CMakeFiles  Makefile  cmake_install.cmake  foo  hello 
반응형

'Open Source > cmake' 카테고리의 다른 글

[번역] CMake FAQ  (0) 2011.08.18
[CMAKE] File 다루기  (0) 2011.05.30
[cmake] 2. Hello with two files.  (0) 2011.04.12
[cmake] 목차  (0) 2011.04.12
CMake 소개  (0) 2011.04.07