IT 프로그래밍/오픈소스소프트웨어

[오픈소스소프트웨어] chap 10-2 여러파일 구성

기술1 2024. 10. 15. 14:25
반응형

여러 파일로 구성된 프로그램 빌드하기

$gcc -o calc calc.c eval.c stack.c token-c -lm

일일이 타이핑하기 귀찮음과 매번 모든 소스 파일을 새로 컴파일해야 합니다. 이를 위한 대안으로

 

shell script를 이용하는 것입니다.

$cat mybuildscript
gcc -o calc calc.c eval.c stack.c token.c -lm
$./mybuildscript

문제점

  • 하나의 파일만 수정한 경우에도 매번 모든 소스파일을 다시 컴파일
  • 규모가 큰 프로젝트의 경우 엄청난 시간 낭비
  • 새로 컴파일 할 필요가 이쓴 소스 파일만 자동으로 찾아서 컴파일해주는 기능이 필요

make와 Makefile

의존성 : 프로그램 빌드에는 순서가 있음

  • 가령 foo.c 파일이 bar.h 파일을 include 한다고 가정할 때
  • foo.c는 bar.h에 의존합니다. 왜냐하면 bar.h가 수정되면 foo.c를 새로 컴파일해야하기 때문입니다.

Makefile

  •  파일들간의 의존성을 기술하는 파일
  • 프로그램을 빌드하는 방법을 정의

유틸리티 파일 make

  • Makefile을 읽어서 지정된 방법으로 프로그램을 빌드하는 프로그램

calc 이 줄은 의존성의 리스트입니다. calc는 타겟입니다. calc를 만들려면 4개의 오브젝트 파일이 변경이 되었다면 calc의 실행 파일을 새로 만들어야 한다는 뜻입니다.

 

gcc -o  -lm 은 타겟을 만드는 방법을 기술합니다. gcc라는 명령을 실행하고 -o 오브젝트를 넣어주고 lm을 해주면 됩니다.  gcc앞에는 tab 문자를 넣어주어야 합니다. 

 

Build Tool

C / C++

오토 툴(automake, autoconf)  : makefile과 쉘 스크립트 기반의 빌드 툴, 여전히 가장 많이 사용

$./configure
$ make

cmake : 최신의 빌드시스템

 

Java

Ant, Maven, Gradle

 

Python

waf

 

CTAGS

프로그램 소스 파일에서 각종 심볼들에 대한 TagFile(인덱스 혹은 데이터베이스)를 구성하여, 심볼들을 정의한 위치와 참조관계를 빠르게 탐색할 수 있는 Software Tool

 

사용법

인덱스(탐색을 위한 데이터베이스) 생성

 

ctags <파일 리스트> 또는 ctags-R

  • CTAGS-r은 현재 디렉토리 및 모든 하위 디렉토리의 파일들에 대해 tag를 생성

 

vi(vim)에서 ctags를 사용하기 위한 설정

  • vi ~/.vimrc 명령으로 vimrc 파일을 열고 다음과 같이 설정
  • set tags = ./tags
  • vi 명령으로 소스 파일을 읽고 ctags 명령을 사용
  • tj<심볼> 또는 심볼에서 '^]'를 누름 : 해당 심볼이정의된 위치로 이동함
  • po 또는 ^t : 이전 위치로 이동

 

반응형