makefile 내에서 if문 사용가능한가요?
글쓴이: dcmru / 작성시간: 수, 2007/05/23 - 4:56오후
제목처럼 makefile 내에서 if문이 사용가능한지 궁금합니다.
makefile 앞부분에서 CF 라는 값에 컴파일시 선언되어야하는 값을 지정합니다.
결과적으로 만들어지는 바이너리 파일의 기능이 틀려지게 되는데요.
예를 들자면
#CF = -D__1__
#CF = -D__2__
위와 같이 여러개가 선언되어 있는데, 컴파일 할 때 마다 makefile에서 CF 한가지만 주석해제를 하여 make를 합니다.
그런데 makefile 내에서 base라는 하나의 옵션에 앞에 선언된 CF 값이 무엇인지에 따라
base: 실행파일1
또는
base: 실행파일2
같이 make 할 때 구분지어져 컴파일되게 할려고 합니다.
쉘 스크립트의 if문을 사용하면 될 것같은데, 사용방법을 아시면 가르쳐주세요.
아니면 다른 방법이 있는지요?
Forums:
BASE =0 ifeq ($(BASE),1) CF
BASE =0
ifeq ($(BASE),1)
CF =-D__1__
else
CF =-D__2__
endif
이렇게 해보세요.
make에서 ifeq를 찾아보아야겠습니다.
답변감사드립니다.
제가 올린 질문의 의도는
문자열 CF 값을 비교하여 make의 base 옵션을 변경하는 것입니다.
ifeq를 사용하여 CF 이것이 비교되는지 해봐야겠군요.
----------------
노력만이 살길이다.
노력만이 살길이다.
내용을
내용을 잘못이해했네요. 요즘 하루종일 학교-학원 다니느라 제 정신이 나간것 같습니다.
CF=-D__1__
ifeq ($(shell test $(CF) = -D__1__&&echo 1), 1)
BASE=실행파일1
else ifeq ($(shell test $(CF) = -D__2__&&echo 1), 1)
BASE=실행파일2
else
BASE=실행파일3
endif
이런식으로 해보세요.
아니면
FOO=1
ifeq ($(FOO), 0)
CF=-D__1__
BASE=실행파일1
else ($(FOO), 1)
CF=-D__2__
BASE=실행파일2
else
CF=-D__3__
BASE=실행파일3
endif
이런식으로 해도 될 것 같네요.
ifeq가 표준은 아닌것인가요?
여러 OS에서 사용할려고 하는데, 솔라리스에서 바로 막히네요.
좀더 여러 OS에서 사용가능한 방법이 필요합니다.......
----------------
노력만이 살길이다.
노력만이 살길이다.
솔라리스에 대해서는
솔라리스에 대해서는 모르지만 gmake를 설치하면 되지 않을까요?
답변 감사드립니다.
최소 AIX, HP-UX, SunOS, Linux 등에서 같이 사용할 수 있어야합니다.
make에서도 제공하는 기능들이 많이 있네요.
제 무지가 탄로 나는군요 ^^;
검색을 해보니 보통 GNU Make에 대한 설명이네요.
gmake는 기존에 쓰지 않아서 사용을 할 수 없는 상황입니다.
머리를 굴리다 굴리다 안되어서 CF와 같이 옵션에 대한 변수를 하나 두어 같이 주석으로 처리해버렸습니다.
base: $(변수)로 사용했습니다.
ifeq를 사용 못하니 어쩔 수가 없습니다 ㅠㅠ
----------------
노력만이 살길이다.
노력만이 살길이다.
댓글 달기