본문 바로가기

L I N U X

cmake 사용예

cmake의 또다른 예제 하지만 난 따라 했는데 안되었네요
make install 까지는 무사히 잘 되었는데 실행 파일을 실행 하였으나 에러가 나오네요
아마 기본적인 리눅스 를 몰라서 안되는 것같습니다.
역시 쉬운일 하나 없군....

http://semtle.tistory.com/205#recentTrackback


Autotools에 지친 이들이여 CMake 로 오라! 
CMake 는 아주 쉽게, 너무 쉽게 Makefile 을 생성해 주는 오픈소스 빌드 시스템이다.

우선 CMake 가 없다면 설치하고 시작.

$ sudo apt-get install build-essential
$ sudo apt-get install cmake


간단히 예제를 살펴보자. 아래는 소스 디렉토리 구조.

hello 디렉토리 안에 CMakeLists.txt 파일이 있다.
개발자가 빌드를 수행하기 위해 작성하여야 하는 단 하나의 파일.

각각의 파일을 보면,

hello.c



func.c



func.h



뭐 설명이 필요없는 간단한 예제이다.
이제 func.c 파일을 공유라이브러리로 컴파일하고 hello 로 하여금 링크타임때 참조하게 하도록 
CMakeLists.txt 파일을 작성해 보자.

CMakeLists.txt



설명이 필요 없을만큼 직관적으로 기술하고 있다.
내장 변수들이 몇가지 있어서 조금 설명하자면,

4 라인에 CMAKE_INSTALL_PREFIX 는,
autotools 사용할때  ./configure PREFIX=/usr 하는것과 같은 맥락.
다들 알겠지만 리눅스에서 소스를 컴파일하고 설치하면 default 로 /usr/local 에 설치된다.
/usr 에 설치되어야 하므로 PREFIX를 재정의 해줘야 한다.
21 ~ 23 라인에서 재정의 된 PREFIX 를 이용하여 DESTINATION 변수가 알아서 설치한다.

17 라인에 SHARED 는,
공유라이브러리로 컴파일하라는 것. 저 자리에 STATIC 이라고 기술해 주면 정적라이브러리가 생성된다.
물론 라이브러리 이름은 myfunc로 지정해 줬으므로 libmyfunc.so(libmyfunc.a) 로 생성된다. 

19 라인에서는 링크할 라이브러리 이름을 지정해 주는 것이고..


이제 쉘로 빠져나와 

$ cmake .
$ make
$ sudo make install

를 차례대로 실행하면 Makefile을 생성, 컴파일 및 링크를 수행하고 실행파일이 생성된다.
실행파일은 /usr/bin 에, 라이브러리는 /usr/lib 에, 헤더파일은 /usr/include 에 복사된다.


위에 설명한 내용 이외에, 유용한 기능들이 아주 많으므로 궁금하면 아래 링크를 참조하자.

CMake reference: http://www.cmake.org/
 

'L I N U X' 카테고리의 다른 글

Makefile ??  (0) 2012.02.28
환경 변수 설정  (0) 2012.02.27
cmake 사용법  (0) 2012.02.24
라이브러리 로딩 - ld.so.conf  (0) 2012.02.22
compile option  (0) 2012.02.21