cmake - hanyangcalab.hanyang.ac.kr/courses/sp_taesoo/prct_03_ctags... · 2014. 12. 21. · cmake...

43
CMake Make dependency CMake

Upload: others

Post on 02-Feb-2021

1 views

Category:

Documents


0 download

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