오픈소스소프트웨어 정리 #11 Linux 에서 C/C++ 프로그램의 빌드

yuju9·2022년 11월 23일
0

오픈소스소프트웨어

목록 보기
11/14

소프트웨어 빌드


IDE (통합개발환경)

  • Build기능을 겸하기도 하지만 주로 코드 개발(코드 작성, 컴파일, 링크, 디버깅 등)에 초점
  • 리눅스용 C/C++ IDE
    • ex. KDevelop, Eclipse, NetBeans, CodeBlocks, Anjuta

gcc & g++

  • GNU Compiler Collection & GNU C Compiler
  • GCC는 .c랑 .cpp 확장자의 소스 파일을 각각 C와 C++언어로 컴파일 한 후 C라이브러리와 링크
  • g++은 GNU C++ Compiler
  • g++은 모두 C++ 언어로 컴파일하고 C++ 라이브러리와 링크

gcc 명령

형식

gcc 옵션 소스파일 리스트

옵션

  • -c : 컴파일만 수행 (링크 X)
  • -o <file> : 실행 결과를 file 이름으로 저장
  • -g : 디버깅용 코드 생성
  • -O : 코드 최적화 수준 지정
  • -I : 표준 헤더파일 이외에 헤더파일들이 있는 디렉토리들을 지정
  • -L : 링크할 라이브러리를 지정
  • -Wall : 더욱 많은 경고 메시지 출력

라이브러리 사용하기

소스 코드에 사용할 라이브러리 헤더 파일 include

  • #include <foo.h>
  • #include <foo/foo.h>

각 라이브러리에 대한 문서 참조

  • /usr/share/doc/<package>

라이브러리를 사용하는 프로그램의 컴파일

  • 컴파일 시 헤더 파일과 라이브러리 위치를 제공해야함
  • 가장 쉬운 방법은 pkg-config를 사용하는 것(대부분의 라이브러리들이 지원)
  • gcc -o test test.c $(pkg-config --cflags -libs)

디폴트로 라이브러리와 동적으로 링크


디버깅

GNU 개발의 공식 디버거는 gdb

컴파일 할 때 -g 옵션 추가하고 gdb 디버거 실행

gcc -o test test.c -g //컴파일 할 때 -g 옵션 추가
gdb test //gdb 디버거 실행

gdb?

  • 텍스트 기반
  • 쉘과 유사한 커맨드라인 인터페이스 제공

명령어

  • break (b) : 브레이크 포인트 설정, 함수명이나 코드 위치, 메모리 절대 주소 등
  • print (p) : 변수의 값을 프린트
  • c : 다음 브레이크 포인트까지 실행
  • next (n) : 한줄 실행
  • step (s) : 한줄 실행
  • backtrace (bt) : 함수 호출 스택 디스플레이
  • run / start : 프로그램 실행, start는 디버깅 실행

Header Files

'#include' 지시어는 여러 개의 소스파일들이 정보를 공유할 수 있게 해줌

  • #include 지시어는 전처리기로 하여금 지정된 파일을 삽입하도록 함.
  • 따라서 여러 소스 파일이 공유해야 하는 정보를 헤더 파일에 저장하고, include 지시어를 이용해 그 내용이 소스 파일에 포함되도록 만듦.
  • 이런 식으로 다른 파일에 소스 코드가 삽입되는 파일을 header 파일 혹은 include 파일이라고 부르며, 전통적으로 header 파일은 확장자 .h 를 가진다

#include 지시어

형태

  • #include <filename>
    전처리기는 시스템 header파일 디렉토리를 검사
  • #include "filename"
    현재 디렉토리를 먼저 검사하고, 시스템 header파일 디렉토리를 검사




  • 중복된 헤더파일이 항상 오류인 것은 아님
  • 매크로 정의, 함수 프로토타입, 그리고 외부 변수의 선언은 여러번 중복되어도 상관 없음
  • 하지만 타입 정의가 중복되는 것은 컴파일러 오류를 야기함

헤더 파일 중복 방지

전통적인 방법

  • 중복된 헤더 파일 문제를 해결하기 위해 #ifndef - #endif 지시어 사용

pragma 지시어 사용

  • #pragma once

make와 Makefile

Makefile

  • 파일들간의 의존성(프로그램 빌드에는 순서 有)을 기술하는 파일
  • 프로그램을 빌드하는 방법 정의

유틸리티 프로그램 make

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



CTAGS

프로그램 소스 파일에서 각종 심볼(변수, 함수, 매크로 등)들에 대한 Tag File(인덱스/데이터베이스)를 구성하여 심볼들을 정의한 위치와 참조관계를 빠르게 탐색할 수 있는 소프트웨어

사용법

  • 인덱스 생성
    ctags <파일 리스트>
    ctags -R : 현재 디렉토리 및 하위 디렉토리의 파일들에 tag 생성

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

  1. vi ~/.vimrc 명령으로 vimrc파일을 열고 다음(2)과 같이 설정
  2. set tags=./tags
  3. vi 명령으로 소스 파일을 읽고 ctags 명령 사용

0개의 댓글