C

make file

syom 2020. 6. 14. 23:39

쉘스크립트 작성

-> 일반적으로 스크립트 첫번째 줄에 "#bin/sh"를 넣어준다.

이는 bash shell이라는 것을 명시적으로 알려주는 것이며, 생략 가능합니다.

- 생략 가능하나 그럴 경우 시스템의 default shell이 사용됨.

- Shell 종류에 따라 command  및 사용법이 조금씩 다르므로, 명시적으로 선언하지 않을 경우 runtime 오류가 발생 가능합니다.

 

주석

-> “#”으로 시작하는 Line은 주석으로 인식합니다.

 

사용자 변수

기본적으로 “변수명=값” 와 같은 형태로 작성한다.

 

  • 변수명에 값을 할당할 때 공백을 넣지 않는다.

  • 대소문자 구분

  • 변수명에 ? * 문자는 사용 금지

 

명시적 변수 선언

  1. declear 또는 typeset 명령 사용 (bash에서만 사용 가능)

  2. 옵션

    1. ‘-i’   : 정수

    2. ‘-a’   : 배열

    3. ‘-f’ : 함수

    4. ‘-r’ : 읽기 전용

    5. ‘-x’ : Shell 외부에서 사용 가능 변수

gcc option

 

  -o 

  output 파일 이름 지정

  -c

  object 파일 생성

  -I 

  header file 위치 지정 -I<폴더이름>

  -l 

  라이브러리  파일 지정 -l<파일이름>

  -L 

  라이브러리 폴더 지정 -L<폴더이름> 

 

 

 

  • “$@” : 현재 타겟의 이름
  • $^” : 현재 타겟의 종속 항목 리스트

· 확장자 규칙에 의해서 make는 파일들 간의 확장자를 자동으로 인식해서 필요한 작업을 자동으로 수행한다. 위의 예제에서는 자동적으로 아래와 같은 루틴이 자동적으로 동작하게 된다.

 

.c .o :

$(CC) $(CFLAGS) -c $< -o $@

 

· make 내부에서 기본적으로 서비스를 제공해 주는 확장자는 다음과 같다.

.out .a .ln .o .c .cc .C .p .f .F .r .y .l .s .S .mod .sym .def .h .info .dvi .tex .texinfo .texi .txinfo

 

· Makefile내부에서 .SUFFIXES 매크로의 값을 세팅해 주면 내부적으로 정의된 확장자의 연산이 동작을 하게 된다. 따라서 확장자 규칙은 make가 어느 확장자를 가진 파일들을 처리할 것인가를 정해 주는 것이다.

 

내부 매크로(Internal macro)무엇일까?

 

make에서는 내부 매크로라는 것이 있다. 이것은 우리가 맘대로 정할 수 있는 매크로는 절대 아니다. 대신 매크로를 연산, 처리하는데 쓰이는 매크로라고 하는 것이 더 적당할 것이다. 아래의 Table 4-1은 내부 매크로에 대해 설명하고 있으며, List 4-11은 내부 매크로를 사용한 예를 보여 주고 있다.

 

내부 매크로

          

$*

확장자가 없는 현재의 대상(Target) 파일

$@

현재의 대상(Target) 파일

$<

현재의 대상(Target) 파일보다 더 최근에 갱신된 파일 이름

(dependency중에서 처음에 위치한 파일 이름)

$?

현재의 대상(Target) 파일보다 더 최근에 갱신된 파일 이름

(모든 dependency 파일의 이름)

 

main.o : main.c io.h

     gcc -c $*.c ($* 확장자가 없는 현재의 대상 파일이므로 $* 결국 main 해당된다.)

 

 test : $(OBJECTS)

     gcc –o $@ $*.c ($@ 현재의 대상 파일이므로 $* 결국 test 해당된다.)

 

 .c .o :

     gcc -c $< (또는 gcc -c $*.c)

($< 현재의 대상 파일보다 최근에 갱싱된 파일 이름이므로, .o 파일보다 최근에 갱신된 .c 파일은 자동적으로 컴파일이 된다. 가령 main.o 만들고 다음에 main.c 갱신하게 되면 main.c $< 작용에 의해 새롭게 컴파일 된다.)



 

 

https://lsit81.tistory.com/entry/Bash-Shell-Script

 

Bash Shell Script

Intro... Shell Script 란? Wikipedia에 다음과 같이 정리되어 있습니다. 셸 스크립트(shell script)는 셸이나 명령 줄 인터프리터에서 돌아가도록 작성되었거나 한 운영 체제를 위해 쓰인 스크립트이다. 단��

lsit81.tistory.com

http://doc.kldp.org/KoreanDoc/html/gcc_and_make/gcc_and_make-2.html#ss2.2

 

gcc와 make 강좌: gcc 강좌

디렉토리명은 -I 라는 문자 바로 다음에 붙여서 씁니다. 즉 -I <디렉토리>라는 식이 아니라 -I<디렉토리> 입니다. 또한 유닉스에 있어 표준 헤더 화일 디렉토리는 /usr/include 라는 사실을 기억하시기

doc.kldp.org

https://betterourlife.tistory.com/17

 

ar 명령어로 라이브러리(Library) 다루기

ar 명령어를 사용하여 정적라이브러리에 대해서 간단히 알아보겠습니다. man 명령어로 확인해보니 library archive를 만들거나 관리하는 utility라고 되어 있습니다. archive가 만들어진 후에는 새로운

betterourlife.tistory.com

 

와일드카드 

http://korea.gnu.org/manual/release/make/make-cwryu/make-ko_4.html

 

GNU make - 룰 작성하기

Go to the first, previous, next, last section, table of contents. 룰은 메이크파일에 나타나고, 이것은 언제 어떻게 파일을 다시 만들 것인가에 관해 적혀 있다. 이 만드는 파일을 그 룰의 타겟이라고 한다 (대��

korea.gnu.org

https://bowbowbow.tistory.com/12

 

make와 Makefile

make 와 Makefile make 와 Makefile make 와 Makefile make & Makefile 이란? make를 쓰는 이유 예제 기본적인 컴파일 과정 make를 이용한 컴파일 과정 Makefile 의 구성 Makefile의 기본구조 Makefile 작성규칙..

bowbowbow.tistory.com

https://powergi.tistory.com/entry/%ED%8E%8C-Makefile%EC%9D%84-%EB%A7%8C%EB%93%A4%EC%96%B4%EB%B3%B4%EC%9E%90-1

 

[펌] Makefile을 만들어보자

 컴파일 작성한 코드에 구문검사를 해서 구문에 이상이 있다면 오류를 내주어 작성한 유저에게 알려주고 만약 검사에 이상이 없다..

powergi.tistory.com