728x90

컴파일

gcc를 활용하여 컴파일할 수 있다.

gcc hello.c

이런 식으로 컴파일을 하게 되면 a.out이라는 실행파일이 생성되게 된다.

 

만약 .out이 아닌 다른 실행파일을 만들고 싶다면 -o 옵션을 주면 된다.

gcc -o filename source_1.c

이런식으로 컴파일하게 되면 ‘filename’이라는 실행파일이 생성된다. filename은 사용자가 원하는 이름을 넣어주면 된다.

 

두 개 이상의 소스코드로 하나의 실행파일을 만들 수 있다.

아래와 같은 두 개의 c 파일이 있다고 할 때

// one.c

# include <stdio.h>

void printmsg(void);     // two.c에서 정의해 줄 함수

main(){

	printmsg();

}
// two.c

# include <stdio.h>

void printmsg(void){

	printf("hello world!\n");

}

 

이 두 개의 소스코드를 이용해 three라는 이름의 실행파일을 만드려면 다음과 같다.

gcc -o three one.c two.c

 

이때 둘 중 하나의 소스코드를 미리 컴파일해서 object file을 먼저 만든 후 다른 소스코드와 함께 실행파일을 만들 수 있다.

gcc -c one.c   // one.o 라는 object file 생성
gcc -o three one.o two.c    // 이런식으로도 가능

 

Make와 Makefile

  • Make
    • 주어진 셸 명령어들을 조건에 맞게 실행하는 프로그램
    • Makefile에서 정한 연관성을 유지하여 항상 최신의 소스코드에 부합하는 실행코드를 쉽게 만들 수 있도록 함
  • Makefile
    • 어떤 조건으로 명령어를 실행할 지 담은 파일
    • 소스코드, 목적코드, 실행코드들의 연관성을 나타내고, 이전 단계의 파일이 갱신되었을 때 다음 단계의 파일을 만들기 위한 명령어 포함

 

Makefile의 구조

target_list : dependency_list
              command_list
  • target_list : 새롭게 만들고자 하는 파일명
  • dependency_list : target_list를 만들기 위한 파일들
  • command_list : dependency_list에서 나열된 파일들로 target_list를 만들기 위해 실행되어야 하는 명령어 라인 반드시 TAB을 사용하여 들여쓰기를 해야한다.

이에 대한 예시는 다음과 같다.

hello: hello.c
	gcc -g hello hello.c

hello 라는 파일을 만드는데, 필요한 파일은 hello.c이며 명령어는 gcc -g hello hello.c 이다.

 

여기서 make를 실행하면 현재 디렉터리에서 Makefile이라는 이름의 파일을 찾고 Makefile내에 기술되어 있는 규칙에 따라 최종 파일을 만든다.

꼭 Makefile이라는 이름을 쓸 필요 없고, -n 옵션을 통해 파일명 별도로 지정 가능하다.

 

make -n makefile_hello

 

위에 대한 전체적인 예시는 다음과 같다.

$ cat Makefile
hello: hello.c
	gcc -o hello hello.c

$ make
gcc -o hello hello.c

 

디버그

GNU에서 만든 gdb를 활용하여 소스 코드의 디버깅 가능하다.

-g 옵션을 주면 된다.

gcc -g -o test test.c

 

 

[참고 도서]

https://search.shopping.naver.com/book/catalog/32466564822?cat_id=50010586&frm=PBOKPRO&query=%EB%A6%AC%EB%88%85%EC%8A%A4+%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D+%EA%B8%B0%EC%B4%88&NaPm=ct%3Dlbyu3ieo%7Cci%3D7cad1b5d759101477054e71edc8c0dfaeebfff7d%7Ctr%3Dboknx%7Csn%3D95694%7Chk%3D8088dfb2d9d8acfcaf2b6dc0805002a30cb4335b 

 

리눅스 프로그래밍 기초 : 네이버 도서

네이버 도서 상세정보를 제공합니다.

search.shopping.naver.com

 

728x90

'Linux > Linux Programming' 카테고리의 다른 글

리눅스 기초 [1] 리눅스의 주요 특징  (0) 2022.12.22

+ Recent posts