[Q]Makefile에서 파일 이름에 따른 선택적인 실행을 할 때...
[Q]Makefile에서 파일 이름에 따른 선택적인 실행을 할 때...
안녕하십니까?
리눅스의 Makefile 관련 고수님들의 도움을 얻고자 아래 내용의 글을 등록합니다.
Makefile에서 파일 이름 비교해서 같으면 실행하고 틀리면 다른 것을 실행하게 할려고 합니다.
-----------------------------
ifeq($@, /usr/kkk)
mv -f $@.new.exe $@.exe
else
mv -f $@.new $@
endif
------------------------------
위에서 ifeq 부분이 자꾸 에러가 납니다.( Syntax erroe: word unexpected (expecting ")"))
위에서 ifeq 대신에
ifneq-TAB- "$@" "/usr/kkk"
이라고 해도 에러가 나는데...(ifneq not find)
/usr/kkk 은 "디렉토리 이름/파일이름"이고
$@는 파일 이름을 넣어두었던 변수입니다.
즉, /usr 디렉토리의 모든 파일중에 "/usr/kkk"와 같은
파일이 있으면 실행하고 그렇지 않으면 다른 것을 실행하는 루틴입니다.
실제 위의 루틴은
----------------------------------------------------
define do-install-program
$(make-target-directory)
$(INSTALL_PROGRAM) $< $@.new
mv -f $@.new $@
endef
----------------------------------------------------
와 같은 define의 do-install-program에 있는 부분을 제가 수정하였으며,
(
test.new.exe 파일은
"mv -f test.new.exe test.exe" 로 실행하고
나머지
fool.new 같은 파일은
"mv -f fool.new fool" 로만 실행토록
)
do-install-program부분은
----------------------------------------------------
so-versions := $(sort $(foreach so,$(install-lib.so),.so$($(so)-version)))
$(foreach v,$(so-versions),\
$(inst_slibdir)/lib$(libprefix)%$v): $(common-objpfx)lib%.so \
$(+force)
$(do-install-so)
$(foreach v,$(so-versions),\
$(inst_slibdir)/$(libprefix)%$v): $(common-objpfx)%.so $(+force)
$(do-install-so)
endif
ifdef install-bin
#echo $(install-bin)
$(addprefix $(inst_bindir)/,$(install-bin)): \
$(inst_bindir)/%: $(objpfx)% $(+force)
$(do-install-program)
endif
----------------------------------------------------
위의 ifdef install-bin 부분에서 사용되고 있습니다.
위 내용은 Makerules에 있으며 Makefile에서 Makerules를 include하고 있습니다.
위의 루틴을 어떻게 수정하여야 하는지 혹은 Makefile에서 특정 디렉토리의 특정 파일만
다르게 실행하고자 할때는 어떻게 하여야 할까요?
실제 코드 예를 들면서 설명해 주시면 감사드리겠습니다.
몇일 째 고생하고 있는데, 고수님들의 조언 부탁드립니다.
감사합니다.
음... 재미있을것 같아서 비슷한 동작을 만들어봤는데 역시 비슷한 에러가
음... 재미있을것 같아서 비슷한 동작을 만들어봤는데 역시 비슷한 에러가
발생하더군요.
그래서...
조금 바꿨더니 에러가 사라지긴했는데 맞는답인지를 몰라서 제가한 방법을
써보겠습니다.
원래코드는
라고 했는데 Syntax에러를 내더군요.
그래서
이렇게 첫라인부터 해보았더니 에러는 사라졌지만...
이게 직접적인 원인이 될 수 있을까 생각되긴해도 에러가 발생하지 않았으니
저게 맞는 답일지도 모르겠네요. :)
------------------------------
좋은 하루 되세요.
ifeq를 명령어란에 적어서 그런것으로 생각됩니다.아직 ifeq를 명
ifeq를 명령어란에 적어서 그런것으로 생각됩니다.
아직 ifeq를 명령어란에 적은걸 못봤네요..
혹시 보신분... :oops:
>이렇게 첫라인부터 해보았더니 에러는 사라졌지만
첫라인부터 적으면 명령어로 인식이 안되어서 인것같습니다.
우연히 검색중 나와서 답을 달아보는데 맞는지 확인부탁드립니다.
댓글 달기