cmake - hanyangcalab.hanyang.ac.kr/courses/sp_taesoo/prct_03_ctags... · 2014. 12. 21. · cmake...
TRANSCRIPT
-
CMake
Make 파 일 의 dependency 를 제 대 로 세 팅 하 는 것 은 귀 찮 은 작 업 임CMake 는 이 를 자 동 으 로 설 정 해 주 는 도 구
-
CMake
Make 파 일 의 dependency 를 제 대 로 세 팅 하 는 것 은 귀 찮 은 작 업 임
lib.hmain.c
bill.c
fred.c
main.o
bill.o
fred.o
libfoo.a
program
-
CMake
Make 파 일 의 dependency 를 제 대 로 세 팅 하 는 것 은 귀 찮 은 작 업 임
main.o : main.c lib.h gcc -c main.cbill.o : bill.c lib.h gcc -c bill.cfred.o : fred.c lib.h gcc -c fred.clibfoo.a : bill.o fred.o ...program : main.o libfoo.a ...
-
CMakeLists.txt
cmake_minimum_required(VERSION 2.6)
project (test)
add_executable("test"
"main.c"
"lib.h"
"bill.c"
"fred.c"
)
-
CMakeLists.txt (using a static library)
cmake_minimum_required(VERSION 2.6)
project (test)
add_library(“foo”
“bill.c”
“fred.c”
“lib.h”
)
add_executable("test"
"main.c"
"lib.h"
)
target_link_libraries(“test”
“foo”
)
-
CMakeLists.txt ( 기 타 자 주 쓰 이 는 명 령 들 )cmake_minimum_required(VERSION 2.6)
# to see actual gcc/devenv command lines
set (CMAKE_VERBOSE_MAKEFILE ON)
project (test)
include_directories(
./include
)
add_executable("test"
"main.c"
"lib.h"
"bill.c"
"fred.c"
)
if(WIN32)
find_library(TOURTRE_LIBRARY tourtre /absPath/libtourtre)
target_link_libraries(“test” ${TOURTRE_LIBRARY})
endif()
-
Build using CMake ( 방 법 1: In-source build)
● $ cmake .
→Makefile 이 현 재 폴 더 에 만 들 어 짐● $ make
-
CMake
Make 파 일 의 dependency 를 제 대 로 세 팅 하 는 것 은 귀 찮 은 작 업 임CMake 는 이 를 자 동 으 로 설 정 해 주 는 도 구Multi-platform development!
- supports windows, cygwin, linux, OS X, and so on
- cmake for cygwin is different from cmake for Windows.
- the former is for gcc and make tools in cygwin
- the latter is for windows visual studio or nmake
CMakeLists.txt 를 입 력 으 로 받 아 , Makefile 이 나 eclipse, visual studio 의 프 로 젝 트 파 일 로 변 환 해 준 다 . 리 눅 스 에 서 C/C++ 개 발 을 할 때 Make+eclipse 조 합 은 가 장 쉽 고 직 관 적 인 개 발 환 경 을 제 공 .
콘 솔 환 경 에 서 는 cmake + vim ( 또 는 emacs) + cgdb + etags 조 합 . 익 숙 해 지 면 GUI 기 반 의 개 발 툴 보 다 편 함 . 윈 도 우 에 서 는 cmake + visual studio 조 합 추 천 (cygwin 은 수 업 또 는 unix app porting 시 에 유 용 .)
-
Build using CMake ( 방 법 1: In-source build)
● $ cmake .
→Makefile 이 현 재 폴 더 에 만 들 어 짐● $ make
● 이 방 법 (in-source build) 은 각 종 CMake 관 련 파 일 이 현 재 폴 더 에 생 겨서 소 스 파 일 들 과 섞 이 는 단 점 이 있 음 .
● 또 한 디 버 그 , 릴 리 즈 빌 드 등 여 러 컴 파 일 옵 션 을 동 시 에 사 용 할 수 없 는 등 단 점 이 많 아 권 장 되 지 않 는 방 법 .
● ( 방 법 2 로 넘 어 가 기 전 에 cmake 가 만 든 파 일 들 을 모 두 지 우 세요 . 특 히 CMakeCache.txt 는 반 드 시 지 워 야 함 .)
-
Build using CMake ( 방 법 2: out-of-source 빌 드 )
● $ mkdir build
● $ cd build
● $ cmake ..
→ Makefile 이 build 폴 더 아 래 에 만 들 어 짐● $ make
● 위 세 줄 은 처 음 한 번 만 수 행 하 면 됨 .● 자 동 생 성 된 Makefile 을 직 접 수 정 하 지 말 것
– 소 스 파 일 추 가 시 , CMakeLists.txt 고 친 후 make 수 행 해 서Makefile 업 데 이 트
-
Build using CMake ( 디 버 그 빌 드 )● -D CMAKE_BUILD_TYPE=Debug 옵 션 을 추 가● $ mkdir build_debug
● $ cd build_debug
● $ cmake D CMAKE_BUILD_TYPE=Debug ..
● $ make VERBOSE=true
→ (VERBOSE 옵 션 을 켜 보 면 , gcc 컴 파 일 시 g 디 버 그 플 래 그 가 사 용 되 는 것 을 볼 수 있 음 .)
● $ cgdb ./test
-
Build using eclipse1. Tree 구 조(out-source build 방 식 .
주 의 ! src 폴 더 와 build 폴 더 를 같 은 부 모 폴 더 밑 에 만 들 것 .● test_proj/src : source files and CMakeLists.txt
● test_proj/build : build files (release mode)
● test_proj/build_debug : build files (debug mode)
2. cmake 시 G “Eclipse CDT4 – Unix Makefiles” 옵 션 추 가 (G 에 서 지 원 되 는 옵 션 목 록 은 cmake 쳐 보 면 나 옴 . 윈 도 우 에 서 는 Visual Studio 등 지 원 )
-
● $ mkdir ../build
● $ cd ../build
● $ cmake G “Eclipse CDT4 – Unix Makefiles” ../src
● $ eclipse
● File Import General Existing Projects into workspace→ → →
● Select test_proj/build folder
● Select a project, then press Ctrl+B (or Project build all).→
● Run Run→
Build using eclipse
이 클 립 스 안 에 서 작 업
-
● $ cd ../build_debug
● $ cmake G “Eclipse CDT4 – Unix Makefiles” D CMAKE_BUILD_TYPE=Debug ../src
● $ eclipse
● File Import General Existing Projects into workspace→ → →
● Select test_proj/build_debug folder
● Select a project, then press Ctrl+B (or Project build all).→
● Run Run→
Debug Build
같 은 이 클 립 스 워 크 스 페 이 스 에build_debug 가 가도 추 능
-
Eclipse 사 용 법● Perspective ( 윈 도 우 모 양 설 정 )
– Menu → Window → Open perspective → Debug– Menu → Window → Open perspective → C++
● 윈 도 우 이 동 ( 드 래 깅 )● 윈 도 우 확 대 / 축 소 ( 더 블 클 릭 )● 윈 도 우 종 류
– Project Explorer ( 워 크 스 페 이 스 내 프 로 젝 트 목 록 )– Outline ( 함 수 목 록 )– Console ( 실 행 결 과 )– Problems ( 컴 파 일 에 러 등 )
-
C/C++ Perspective
-
Debug Perspective
-
Run, Debugging
● Click project name in the project explorer
● Menu → Run → Run
● Menu → Run → Debug
● (Debug perspective: see callstack(Debug), variables, breakpoints)
● Menu → Run → Step Into
● Menu → Run → Resume
● Menu → Run → Toggle breakpoints
● …
● Eclipse 는 gdb 의 주 요 기 능 을 대 부 분 지 원 함 .
-
Eclipse + Cmake 또 는 Visual Studio + CMake 사 용 시 주 의 사 항
● 자 동 생 성 된 프 로 젝 트 파 일 을 직 접 수 정 하 지 말 것– 프 로 젝 트 에 파 일 추 가 시 CMakeLists.txt 를 직 접 고
칠 것 . – cmake 를 다 시 실 행 할 필 요 는 없 음– 빌 드 시 자 동 으 로 실 행 됨
-
etags / ctags
-
Page 24
Contents
What is ctags?
Features
Variants of ctags
Tags file formats
Using ctags with vi
Practice(ctags)
Using etags in emacs
Practice(etags)
Reference
-
Page 25
What is ctags?
소 스 파 일 에 있 는 항 목 들 을 쉽 고 빠 르 게 찾 을 수 있 도 록 tag(or index) 파 일 을 생 성 .
Ken Arnold 에 의 해 작 성 , BSD UNIX 에 서 처 음 소 개 됨 .
vi 와 emacs 같 은 텍 스 트 에 디 터 뿐 아 니 라 다 른 utility 들 과 도 연 동 사 용 가 능 .
– AcroEdit, BBEdit 8+, JED, JOE, Nedit, UltraEdit, etc
-
Page 26
features
다 양 한 프 로 그 래 밍 언 어 지 원 .– Assembler, basic, C/C++, C#, Cobol, Lisp, matlab, java, perl, etc.
C/C++ 언 어 에 서 사 용 되 는 모 든 형 식 의 tag 생 성 가 능– Class name, macro definitions, function definitions, variables, etc.
전 처 리 기 #if 를 사 용 한 조 건 적 구 조 를 포 함 , 복 잡 한 선 택 에 대 한 해 결 방 법 으 로 조 건 적 경 로 선 택 알 고 리 즘 과 fall-back 알 고 리 즘 을 사 용 .
사 용 자 정 의 언 어 지 원 .
-
Page 27
features
Emacs 스 타 일 의 tag 파 일 출 력 지 원 .
소 스 파 일 에 서 선 택 된 개 체 의 목 록 출 력 가 능 .
다 양 한 OS 상 에 서 실 행 가 능 .– UNIX, MSDOS, Linux, Windows, MacOS, OS/2, QNX, VMS, etc.
-
Page 28
Variants of tags
Etags– Emacs 와 함 께 제 공 되 는 ctags utility.– Vi 스 타 일 로 제 작 된 tag 파 일 과 의 호 환 성 이 떨 어 짐 .
Exuberant Ctags!!!– 초 기 엔 Vim 과 함 께 배 포 되 었 으 나 , Vim 6 부 터 별 도 의 프 로 젝 트 로 분 리 .– Emacs 에 대 한 호 환 성 지 원 포 함 .– 40 개 이 상 의 프 로 그 래 밍 언 어 지 원 .– sudo apt-get install exuberant-ctags
Hasktags– Haskell 언 어 를 위 한 ctags utility.– Emacs etags 지 원 .
Jsctags– JavaScript 를 위 한 ctags utility.– JavaScript 에 서 는 Exuberant Ctags 보 다 뛰 어 난 성 능 을 가 짐 .
-
Page 29
Tags file formats
ctags 파 일 형 식– vi 와 다 양 한 클 론 들 에 서 사 용 , ‘tags’ 라 는 파 일 생 성 .
– {tagname}{tagfile}{tagaddress}– {tagname} : 공 백 을 포 함 하 지 않 은 식 별 자 .– : 구 분 을 위 한 하 나 의 tab 문 자 .– {tagfile} : {tagname} 이 정 의 된 위 치 .– {tagaddress} : EX 모 드 에 서 명 령 사 용 시 에 쓰 여 질 에 디 터 상 의 tag 위 치 .
Exuberant ctags
– Vim 에 서 사 용 되 는 형 식 , 오 리 지 널 ctags 형 식 과 확 장 형 식 모 두 호 환 .
– {tagname}{tagfile}{tagaddress}[;”{tagfield}…]
-
Page 30
Tags file formats
etags 파 일 형 식– etags 파 일 은 입 력 소 스 파 일 마 다 하 나 의 섹 션 으 로 나 눠 진 multiple 섹 션 으
로 구 성 .
– 각 섹 션 은 특 별 한 목 적 을 가 진 몇 개 의 non-ascii 문 자 들 과 일 반 적 인 텍 스 트 로 구 성 .
– 섹 션 은 두 개 의 라 인 헤 더 로 시 작 된 다 .– {src_file}, {size_of_tag_definition_data_in_bytes}
– {tag_definition_text}{tagname}{linu_number},{byte_offset}
-
Page 31
Using etags in emacs
명 령 어– ‘M-.’(‘find-tag’)– 정 의 된 tag file 을 이 용 하 여 tag 를 찾 는 다 .– ‘프 로 젝 트 내 에 같 은 이 름 으 로 여 러 개 의 태 그 가 있 다 면 C-u M-.’ 을 이 용 하 여 다 음 tag
로 이 동 한 다 .– ‘M-*’(‘pop-tag-mark’)– 뒤 로 점 프– ‘M-x tags-search’– regexp(regular expression) 를 이 용 한 탐 색 (shell 상 에 사 용 되 는 grep 명 령 과 비 슷 )– ‘M-x tags-query-replace’– 입 력 한 query 를 통 해 검 색 된 tag 를 교 체– ‘M-x tags-apropos’– 입 력 한 regexp 가 포 함 된 모 든 tag 목 록 출 력– ‘M-x list-tags’– 소 스 파 일 내 에 정 의 된 모 든 tag 목 록 출 력
-
Page 32
Practice(etags)
etags 를 이 용 한 tag file 생 성 .– 기 본 값 으 로 TAGS 라 는 이 름 의 파 일 생 성 .– -f 옵 션 을 이 용 하 여 파 일 이 름 지 정 가 능 .– -a : 기 존 의 tag file 에 추 가– -V : tagfile 생 성 과 정 출 력– -R : recurse, 하 위 폴 더 를 포 함 하 여 tag file 생 성 .
-
Page 33
Emacs 를 이 용 해 생 성 된 tags 내 용 확 인
각 파 일 별 로 섹 션 이 나 뉘 어 진 다 . 각 파 일 별 로 섹 션 이 나 뉘 어 진다 .
Using etags in emacs
-
Page 34
find tags– ‘M-.’ 명 령 이 용 , 찾 고 자 하 는 tag name 입 력
– Tag file 지 정 ( 기 본 은 TAGS)
Using etags in emacs
-
Page 35
Etag 명 령 사 용 시 tab 을 이 용 하 면 매 치 되 는 명 령 어 목 록 을 볼 수 있음 .
Using etags in emacs
-
Page 36
regexp 를 이 용 한 tag 검 색
– 검 색 어 입 력
– 매 칭 되 는 tag 목 록 을 출 력
Using etags in emacs
-
Page 37
Source file 내 의 tag 목 록 출 력
Using etags in emacs
-
Page 38
Using make with vim ● vim
● :pwd
● :!ls
● :cd src
● :pwd
● :make (:!make 와 달 리 , vim 이 컴 파 일 결 과 를 받 아 온 다 )● :copen (compile error 목 록 창 열 기 )● ctrl-w-s or ctrl-w-v (horizontal split window, vertical split window)
● ctrl-w-k ( 윗 쪽 윈 도 우 로 이 동 )● ctrl-w-j ( 아 랫 쪽 윈 도 우 로 이 동 )● (h,j,k,l) 방 향 이 동 키 대 신 화 살 표 키 도 사 용 가 능 . Ex) ctrl-w- → ● :q ( 현 재 윈 도 우 닫 기 )
! 로 시 작 하 는 명 령 은 shell 로 전 달 된 다 .
: 은 확 장 명 력 을 입 력 할 때 사 용 . vim 에 도 pwd 명 령 이 있 음 .
-
Page 39
Using ctags (or etags) with vi
자 주 사 용 하 는 명 령 어 들
명 령 어 설 명:ta [tagname] Tagname 과 일 치 하 는 위 치 로 이 동
Ctrl + ] 커 서 가 위 치 하 고 있 는 함 수 나 구 조 체 의 정 의 로 이 동
Ctrl + t 이 전 위 치 로 돌 아 오 기
:ts [tagname] Tagname 과 일 치 하 는 태 그 목 록 출 력
:tj [tagname] 목 록 이 한 개 인 경 우 이 동 , 여 러 개 인 경 우 목 록 출 력
:tn 다 음 태 그 로 이 동
:tp 이 전 태 그 로 이 동
:tags 이 동 한 태 그 히 스 토 리 목 록 출 력
:sts ts 와 동 일 , 선 택 된 tag 는 분 할 된 윈 도 우 에 출 력
-
Page 40
Practice(ctags or etags)
Tags 생 성– etags * : 현 재 폴 더 에 있 는 소 스 에 대 한 tag 생 성– etags –R : 하 위 폴 더 를 포 함 한 모 든 소 스 에 대 한 tag 생 성– Exuberant-ctags 의 경 우 -R 옵 션 안 됨 . 그 대 신 아 래 명 령 사 용
● Find . -iname “*.cpp” -or -iname “*.h” | xargs etags
Tags 내 용 확 인 (vi TAGS)
-
Page 41
Practice(ctags)
Tag file 선 택– :set tags=”./TAGS”
vi 에 서 tags 를 이 용 한 함 수 간 의 이 동
tags stack history 확 인
vim 에 서 쉬 운 tag 사 용 을 도 와 주 는 오 픈 소 스 프 로 그 램https://github.com/gmarik/vundlehttp://valloric.github.io/YouCompleteMe/https://github.com/gmarik/vundle/wiki/Exampleshttp://code.google.com/p/gitv
https://github.com/gmarik/vundle
-
Page 42
Reference
source forge– http://ctags.sourceforge.net/
Emacs Tags– http://www.emacswiki.org/emacs/EmacsTags
emacs– http://www.gnu.org/software/emacs/emacs.html
http://ctags.sourceforge.net/http://ctags.sourceforge.net/http://www.emacswiki.org/emacs/EmacsTagshttp://www.emacswiki.org/emacs/EmacsTagshttp://www.gnu.org/software/emacs/emacs.htmlhttp://www.gnu.org/software/emacs/emacs.html
-
Page 43
Quiz
● Download source codes of any open source program
– For example, FLTK or Ogre which uses CMake ● http://www.fltk.org/software.php?VERSION=1.3.2&FILE=fltk/1.3.2/fltk-1.3.2-source.tar.gz
● Build
● Debug-build
● Trace a test program using cgdb
● Find a function which is called when a button is clicked using combi-nations of :vimgrep, :grep and :ts in the vim editor
– e.g. in the VIM– :cd examples– :vimgrep main *.cxx– :copen– :ts MyMenuCallback
http://www.fltk.org/software.php?VERSION=1.3.2&FILE=fltk/1.3.2/fltk-1.3.2-source.tar.gz
Slide 1Slide 2Slide 3Slide 4Slide 5Slide 6Slide 7Slide 8Slide 9Slide 10Slide 11Slide 12Slide 13Slide 14Slide 15Slide 16Slide 17Slide 18Slide 19Slide 20Slide 21Slide 22Slide 23ContentsWhat is ctags?featuresfeaturesVariants of tagsTags file formatsTags file formatsUsing etags in emacsPractice(etags)Practice(etags)Practice(etags)Practice(etags)Practice(etags)Practice(etags)Slide 38Using ctags with viPractice(ctags)Practice(ctags)ReferenceSlide 43