[완료]GNU make에서 argument값 얻기
글쓴이: solikang / 작성시간: 수, 2008/04/30 - 11:19오전
안녕하세요.
makefile을 만들어서 GNU make을 쓰려고 하는데 궁금한 점이 있어서 질문을 드립니다. 크게 두가진데 하나는 명령창의 arguments와 관련된 것이고, 나머지는 문자열 처리하는 것입니다.
1. 보통 C-console 프로그램을 만들때 command 입력시 arguments를 추가해서 입력했을때, 프로그램 내부에서 그 arguments를 받아서 연산을 한다던가 하는데, makefile에서도 그런식으로 할수 있는지 궁금합니다. 예를 들어, 명령창에 "make aaa"이라고 입력했을 때, 'aaa'라는 값을 받아올 수 있습니까? 그 값을 ifeq같은걸로 비교하고 싶어서 그렇습니다.
2. 특정 target에서 문자열 수정하는 방법이 알고 싶습니다. 예를 들어, 특정 target일때만 debug정보를 추가해서 build하고 싶어서 그때만 "CPPFLAGS += -g" 이런식의 처리를 하고 싶어서요. 명령어를 어떤식으로 써야 할지 모르겠습니다. manual같은데서 보면 override뭐 이런 함수를 쓰면 된다고해서 $(override $(CPPFLAGS) += -g) 이런식으로해도 차이가 없네요.
Forums:
$ make TARGET...
꼴로 실행합니다. 예를 들어 변수 CFLAGS의 값을 바꾸고 싶다면 다음과 같이 호출 하면 됩니다.
사용자가 command-line에서 변경한 변수의 값을 내부에서 바꾸고 싶다면, override directive를 쓰면 됩니다. 예를 들어 무조건 '-g'를 추가하고 싶다면:
라고 하면 되겠죠. 빼고 싶다면 $(subst ...) 함수를 쓰면 될 것 같군요.
--
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://www.cinsk.org/cfaqs/
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
추가 질문입니다.
우선 답변해주셔서 감사드립니다. 답변에 대한 추가 질문을 좀 드리겠습니다.
----------------------------------------------------------------
사용자가 command-line에서 변경한 변수의 값을 내부에서 바꾸고 싶다면, override directive를 쓰면 됩니다. 예를 들어 무조건 '-g'를 추가하고 싶다면:
override CFLAGS += -g
라고 하면 되겠죠. 빼고 싶다면 $(subst ...) 함수를 쓰면 될 것 같군요.
---------------------------------------------------------------
이부분에서 override로 처리가 가능하다고 하셨는데, 특정 target안에서 사용하려고 하니 override가 command가 아니라고 error가 납니다. 예를 들어 아래와 같은 상황입니다.
dbug :
(tab) @echo $(CPPFLAGS)
(tab) override $(CPPFLAGS) += -g
(tab) @echo $(CPPFLAGS)
(tab) make
여기서 dbug target안에서 CPPFLAGS값을 바꾸기 위해 override를 사용하다보니 command로 인식을 해버리는 것 같습니다. 그렇다고 앞의 tab을 뺄수도 없는 노릇이구요.
$(override $(CPPFLAGS) += -g) 이런식으로 표시하면 변수값이 바뀌지도 않고 그냥 지나가버립니다.
자답입니다.
dbug :
(tab) make all CPPFLAGS="$(CPPFLAGS) -g"
이런 방식으로 원하는 건 처리했습니다.
다만, 위에 질문드렸던 것처럼 저런 상황에서 override 같은걸 어떻게 쓰는지는 궁금합니다. 혹시 아시는 분 계시면 답글 부탁드립니다.
override는 지시어이기
override는 지시어이기 때문에 rule을 지정하는 곳, 즉 command를 쓸 곳에 쓰는 것이 아닙니다. rule 지정 밖에서 해 보세요.
--
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://www.cinsk.org/cfaqs/
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
MAKECMDGOALS 라는
MAKECMDGOALS 라는 변수가 있습니다.
아래와 같은 코드를 추가할 수 있겠습니다.
자세한 내용은 아래를 참조하세요.
http://www.gnu.org/software/make/manual/make.html#Goals
(냉무)답변 감사드립니다.
감사합니다
댓글 달기