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
728x90

리눅스의 주요 특징

  • 다중작업
    • 선점 가능한(preemptive) 다중 작업 지원
    • 이때 작업은 실행중인 상태의 프로그램 의미 → 프로세스
    • 이때 다중 작업이라는 것은 운영체제가 동시에 여러개 의 프로그램을 사용할 수 있다는 것
  • 다중 사용자
    • 동시에 여러 명의 사용자가 시스템에서 작업하는 것을 허용
    • 멀티 유저가 터미널이나 네트워크 연결을 통해 동일한 하나의 리눅스 시스템을 사용 가능
  • 다중 프로세서
    • 다중 프로세서란 2개 이상의 CPU로 구성된 컴퓨터 시스템
    • 여러 응용 프로그램들이 여러 프로세서들에게 분산될 수 있도록 한다.
  • 이식성과 확장성
    • 이식성 → 다양한 언어로 작성된 프로그램을 리눅스 환경에 맞추어 컴파일하여 사용 가능
    • 확장성 → 다양한 언어로 만들어진 응용프로그램들은 유연하게 사용 가능 프로세스간 입출력을 연결해주는 파이프 기능을 리눅스가 지원해서 여러 프로그램들을 조합해 복잡한 작업을 쉽게 처리할 수 있다.
  • 파일 시스템
    • 리눅스의 파일시스템은 트리구조
    • 별도로 추가된 물리 보조 기억장치나 하드웨어 디바이스들도 파일 형태로 시스템에 연결괴어 있다.
    • 리눅스 유저들은 파일시스템에 연결된 모든 자원들에 쉽게 접근할 수 있다.
  • 권한
    • 다중 사용자의 특성으로 인해 생길 수 있는 여러 문제들을 해결하기 위해
    • 관리자사용자로 나뉨
    • 사용자가 시스템을 쉽게 사용할 수 있도록 중간자의 역할 수행
    • 프롬프트라는 기호 보여줌으로써 사용자에게 시스템을 사용할 수 있음을 알려줌

 

 

[참고 도서]

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' 카테고리의 다른 글

리눅스 기초[2] 컴파일과 디버깅  (0) 2022.12.22

+ Recent posts