Makefile

  • 기본구조
    • 목표: 의존파일들
      (탭문자)명령
  • 명령에 쓸 수 있는 특수 문자들
    • [email protected] – 목표 그대로를 의미함
    • $^ – 의존파일 전체 리스트를 의미함
    • $< – 의존파일에서 제일 첫번째 있는 파일을 의미함
    • $* – 목표에서 확장자를 뗀 파일명만을 의미함
    • ; \ – 명령 문장 끝에 써줘서 다음 줄이 같은 쉘에서 실행되도록 한다. 예를들어 첫번째 명령이 A라는 폴더로 들어가는거고 두번째 명령이 거기에 B라는 폴더를 만드는거라고 하면, 이 문자를 쓰고 안쓰고에 따라 A안에 B가 있느냐 A와 B가 같은 폴더안에 있느냐가 갈리게 된다. 두 문자가 셋트임에 주의.
    • @ – 명령 문장 제일 앞에 써서 명령어가 실행될때 쉘에서 보이지 않게 한다.
    • % – 모든것을 의미 (쉘에서의 * 같은 의미)
  • .PHONY
    • 이것도 나중에
  • .SUFFIXES – 지정된 확장자를 가진 파일에 대해 동일한 처리를 하도록 하는 명령어인데….
    아래 명령어로 대체 가능하다길래 무시하기로 하고 정리 안함

    • %.o: %.cc
      (탭문자)명령
  • 변수 정의법
    • VARIABLE = 어쩌구저쩌구 # 정의
    • $(VARIABLE) # 사용
  • 환경변수가 정의돼있는지 확인할 때 if문
    • ifdef ENVIRONMENT_VARIABLE
    • 어쩌구
    • else
    • 어쩌구
    • endif
  • 쉘에서 실행한 결과를 사용하고 싶을 때
    • $(shell 명령어)
  • 뒷쪽 이름에 앞쪽 이름을 다 붙이고 싶을 때
    • $(addprefix 앞, 뒤)
    • 출력되는 결과는 “앞뒤”. 만약 “뒤”에 오는 내용이 스페이스로 구분된 문자라면, 스페이스 다음에 나오는 문자에는 다 앞이 붙는다. 예를들어 “뒤 = a b c d” 라면 위 명령의 결과는 “앞a 앞b 앞c 앞d” 가 된다.
  •  쉘에서 ls를 쳐서 나오는 모든 cc확장자를 가진 파일을 리스트로 만들고 싶을 때
    • $(wildcard *.cc)
    • 만약 어떤 디렉토리 안에 들어가서 가져오고 싶으면 앞에 경로도 같이 써주면 된다.
  • 어떤 문자에서 단어를 치환하고 싶을 때
    • $(patsubst 이거를, 이걸로, 여기서)
    • 예) $(patsubst %.c, %.o, x.c.c bar.c)
      결과) x.c.o bar.o
  • 변수에 여러개의 아이템이 있는데, 한개만 지우고 싶을 때
    • $(filter-out 이거를,여기서)
    • 예)
      HEADER = A B C D
      HEADER2 = $(filter-out D,$(HEADER)) # 결과는 HEADER2 = A B C
  • 조건문도 사용할 수 있다. (ifeq, ifneq)
    • ifeq (A,B)
      내용
      else
      내용2
      endif

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다

This site uses Akismet to reduce spam. Learn how your comment data is processed.