[Make] Makefile 에서 if else 문 사용하기
포스트
취소

[Make] Makefile 에서 if else 문 사용하기

Makefile 에서 if else 문 사용하기

Makefile 조건문

make 에서 조건문은 단순하고 은근히 까다롭다. 사용할 때 주의해서 사용하자.

Makefile 조건문의 지시어

  • ifeq : 조건을 시작하고 조건을 지정한다. 콤마로 분리되고 괄호로 둘러싸인 두 개의 매개변수를 가진다.
  • else : 이전 조건이 실패하였다면 수행되도록 한다. else 지시어는 사용하지 않아도 된다.
  • endif : 조건을 종료한다. 모든 조건은 반드시 endif로 종료해야 한다.

Makefile 조건문 예시

1
2
3
4
5
6
7
8
9
libs_for_gcc = -lgnu
normal_libs =

foo: $(objects)
ifeq ($(CC),gcc)
        $(CC) -o foo $(objects) $(libs_for_gcc)
else
        $(CC) -o foo $(objects) $(normal_libs)
endif

변수 ‘CC’가 ‘gcc’ 일 때 조건이 참이므로, ifeq 아래의

1
$(CC) -o foo $(objects) $(libs_for_gcc)

가 수행되며, ‘gcc’ 가 아닐 경우 조건이 거짓이므로, else 아래의

1
$(CC) -o foo $(objects) $(normal_libs)

가 수행된다.

Makefile 다중 조건문(중첩 조건)

기본적으로, make 에서 다중 조건문은 존재하지 않는다. AND(&&) 또는 OR(||) 를 사용할 수 없는데, filter 를 활용해 어느 정도 변형하여 사용할 수 있는 듯하다.

참고 : Stackoverflow - makefile-ifeq-logical-or

주의사항

조건문을 사용할 때 지시어들을 들여쓰기(indent) 하지 말자. <syntax error near unexpected token> 와 같은 에러가 날 수 있다.

참고 자료

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.

[마크다운] Markdown 작성 방법

[Python] 파이썬에서 파일 다루기(읽기, 쓰기)