'정리/Make'에 해당되는 글 4건

  1. 2018.12.17 [MAKE] Secondary Expansion
  2. 2018.12.03 [make] makefile 이 없는경우 ?
  3. 2018.12.03 [make] makefile의 명칭
  4. 2018.11.29 [make] make의 묵시적 룰

[MAKE] Secondary Expansion

정리/Make 2018. 12. 17. 14:44 |




.SECONDEXPANSION: 


지시어는 변수확장을 지연해주는 기능을 갖고 있다. 


간단한 예제로 이해해보자 . 


1
2
3
4
5
6
7
8
9
10
11
.SECONDEXPANSION:
AVAR = main.o
 
onefile: $(AVAR)
        cc $<
 
twofile: $$(AVAR)
        cc $<
 
AVAR = test.o
 
cs



해당 예제에서 $$(AVAR) 으로 사용되어진 EXPANSION이 적용 대상이 된다. 


make는 두 개의 실행 페이즈를 가지고 있고, 첫번째 페이즈와 두번째 페이즈 사이에서 SECONDEXPANSION 처리가 이루어진다. 


해서, 최종적으로 make twofile 은 test.o 를 컴파일 하게 된다. 


이제, SECONDEXPANSION이 활용되는 실제 예를 살펴보자. 


1
2
3
4
5
6
7
.SECONDEXPANSION:
main_OBJS := main.o try.o test.o
lib_OBJS := lib.o api.o
 
main lib : $$($$@_OBJS)
        echo $?
 

cs




위 예는 recipe 에서 $@ automatic 변수를 사용한다.  


원래 recipe에선 $@와 같은 automatic 변수를 사용할 수 없으나, .SECONDEXPANSION을 선언하면 $$가 지연확장되어 

prerequisite 에서도 사용할 수 있게 된다. 


위 예제는 make에 전달된 target 에 따라 prerequisite 값이 달라지므로 .SECONDEXPANSION 을 유용하게 활용한 예가 될 수 있다. 


'정리 > Make' 카테고리의 다른 글

[make] makefile 이 없는경우 ?  (0) 2018.12.03
[make] makefile의 명칭  (0) 2018.12.03
[make] make의 묵시적 룰  (0) 2018.11.29
Posted by $Zero
:

make가 현재 디렉토리에서 


적당한 makefile을 찾지 못한다면, 


make는 커맨드 명령 argument에 명시된 액션에 대한 묵시적 룰을 실행한다. 


쉽게 예를 들면 



make main.o 


라고 커맨드 명령을 줄 시 


makefile이 없어도 make는 main.o에 대한 묵시적 룰인 

${CC} -o main.o -c main.c 

명령을 실행한다. 


위와 같이 간단한 컴파일이라면, makefile이 없어도 make로 컴파일 수행이 가능하다. 


실효성은 .. 


잘 모르겠다. 

'정리 > Make' 카테고리의 다른 글

[MAKE] Secondary Expansion  (0) 2018.12.17
[make] makefile의 명칭  (0) 2018.12.03
[make] make의 묵시적 룰  (0) 2018.11.29
Posted by $Zero
:

[make] makefile의 명칭

정리/Make 2018. 12. 3. 11:42 |

make는 기본적으로 현재 디렉토리에서 


GNUmakefile, makefile, Makefile 을 읽는다. 


셋 중 어떤 이름을 써도 상관은 없으나, 


GNUmakefile은 GNU 외의 make에서는 참조하지 않으므로 추천되지 않는다.


공식 Doc 에선 대문자로 시작하는 이름이 디렉토리 리스팅에서 가장 먼저 발견되며 눈에 띄기 때문에 Makefile을 추천하고 있다. 


makefile의 이름을 부득이하게 변경해야 할 경우 


-f , --file 명령줄 옵션을 통해 명시할 수 있다. 


make -fmyMakeFile 

'정리 > Make' 카테고리의 다른 글

[MAKE] Secondary Expansion  (0) 2018.12.17
[make] makefile 이 없는경우 ?  (0) 2018.12.03
[make] make의 묵시적 룰  (0) 2018.11.29
Posted by $Zero
:


make는 rule에 정의될 recipe를 추론할 수 있다. 


.. 원문을 매끄럽게 번역 하기가 참 어렵다.


make는 우리가 굳이 recipe에 뻔한 내용을 적지 않아도 recipe 내용을 스스로 추론하여 처리할 수 있다고 한다. 


간단한 makefile로 예를 들어보자.


main.o : main.c 

gcc -c main.c -o main.o 


위와같은 target을 작성 후 make를 수행한다고 가정했을 때 


gcc -c main.c -o main.o 는 매우 보편적인 컴파일 명령이기 때문에 target과 prerequisite의 명칭만 보고도 make는 해당 명령어를 충분히 유추해 낼 수있다. 

이렇게 유추하기 쉬운 명령은 굳이 명시하지 않아도 make는 알아서 recipe를 만들어 처리하게 된다. 


해서, 


hello : main.o

gcc -o hello main.o

main.o : main.c


위와 같이 간단하게 target : prerequisite 만 명시해서 make를 수행할 수 있다. 


단, goal이 되는 hello는 직접 recipe를 명시 해야한다. 



위의 예에서 target main.o는 

$(CC) -c -o main.o main.c 를 알아서 수행하게 된다. 


makefile에 recipe가 비어있다면 묵시적 룰을 사용하고 있는 것이다. 


'정리 > Make' 카테고리의 다른 글

[MAKE] Secondary Expansion  (0) 2018.12.17
[make] makefile 이 없는경우 ?  (0) 2018.12.03
[make] makefile의 명칭  (0) 2018.12.03
Posted by $Zero
: