$ ls
DBMaker.h TableTree DBMaker.cpp Utility main.cpp
(directory TableTree: TableTree.h, TableTree.cpp 포함.)
(directory Utility: util.h, util.cpp 함유.)
$ vim main.cpp
#include <표준적인것들>
#include "util.h"
#include "DBMaker.h"
...
$ vim DBMaker.h
#include <아무거나>
#include "util.h"
#include "TableTree.h"
...
$ vim TableTree/TableTree.h
#include <이것저것>
... // TableTree.h 는 별다른 dependency가 없다.
$ vim Utility/util.h
#include <와구와구>
... // util.h 또한 사용자 정의 헤더파일을 포함하지 않는다.
$ vim CMakeLists.txt (아래 내용은 CMakeLists.txt 파일에 들어가야 할 내용들)
cmake_minimum_required (VERSION 2.8) # 필수 정보
project (DBManager) # 필수 정보
include_directories ("${PROJECT_SOURCE_DIR}/Utility" "${PROJECT_SOURCE_DIR}/TableTree") # to find header files
#add_subdirectory (Utility) # if this directory has CMakeLists.txt file.
#add_subdirectory (TableTree)
add_library (Utility SHARED "${PROJECT_SOURCE_DIR}/Utility/util.cpp") # (생성할 라이브러리 이름, [속성], 파일명 또는 경로)
add_library (TableTree SHARED "TableTree/TableTree.cpp") # this type of path name is also possible.
add_library (DBMaker SHARED DBMaker.cpp)
target_link_libraries (DBMaker Utility TableTree) # (DBMaker는 Utility 라이브러리와 TableTree 라이브러리를 include한다..)
add_executable (dbm main.cpp) # (생성할 실행파일 이름, 파일명)
target_link_libraries (dbm DBMaker Utility)
감각이 있는 분들이라면 아시겠지만 #은 주석 기호.
필수 정보라 표시해둔 것들은 cmake 홈페이지에 튜토리얼 첫 번째 예제에서도 언급되는 것들이다.
제일 처음 두 개의 필수정보를 채워넣은 뒤 필요한 것은 add_executable () 또는 add_library ().
add_library () 만 넣어준다면
$ cmake .
$ make
를 실행해 줬을 때 라이브러리 파일 하나가 생성될 것이다.
(add_library 문법: http://www.cmake.org/cmake/help/cmake-2-8-docs.html#command:add_library)
물론 add_executable () 을 넣어주면 똑같은 과정을 밟았을 때 실행파일이 생성된다.
(add_executable 문법: http://www.cmake.org/cmake/help/cmake-2-8-docs.html#command:add_executable)
dependency가 있을 경우 target_link_libraries 커맨드를 사용한다.
이 커맨드의 첫 번째 argument는 뒤의 모든 argument들을 include하는 관계임을 알 수 있다.
이때, add_library() 나 add_executable() 을 통해 연관된 라이브러리나 실행파일을 모두 생성한 뒤 target_link_libraries()를 써줘야 한다.
(target_link_libraries 문법: 여기서부턴 위 링크된 메뉴얼에서 Ctrl+F 해서 찾아보세요ㅋ)
add_subdirectory는 주석해놨는데.. 저 상태에서 봉인 해제해봤자 동작하지 않을 거다.
해당 directory가 별도로 빌드될 수 있는 모듈인 경우 그 directory에도 CMakeLists.txt 파일을 만들어주고
(이 파일에서도 project(DBManager) 로 프로젝트 이름은 같게 설정한다.)
상위 directory의 CMakeLists.txt 파일(즉, 지금 보여주는 예제 파일)에서 add_subdirectory를 통해 하위 모듈을 포함함을 명시해줘야 한다.
마지막으로 변수(Variable)
변수는 같은 프로젝트 내에선 공유됨.
하위 모듈에서도 ${PROJECT_SOURCE_DIRECTORY}는 같은 값을 가지더라.
변수 목록 역시 Cmake 공식 문서에서 알 수 있고 클릭하면 설명도 볼 수 있다.
더 상세한 설정을 원하면 공식 문서를 뒤져봐야 하는데, 일단 가닥이 잡히니 좀 더 쉽겠지 싶다.
반응형
'Program > C & C++' 카테고리의 다른 글
CMAKE + GCOV + LCOV 사용 (0) | 2014.02.27 |
---|---|
구글 프로토콜 버퍼 (Google Protocl Buffer) (0) | 2013.06.10 |
CMake 정의/개념 (0) | 2013.06.10 |
C++ PostgreSQL Example (0) | 2013.06.10 |
[boost] boost 동기화 객체 boost::shared_mutex (0) | 2013.03.28 |