2010-08-11 2 views
0

PATH에서 찾을 수있는 설치된 프로그램의 디렉토리를 알아 내야하는 Makefile을 작성하고 있습니다. 즉, PATH에 있다고 가정합니다.Makefile에서 하위 문자열 발생 후 문자열 자르기

예 : 이진수가 /opt/Xilinx/12.1/ISE_DS/ISE/bin/lin64/xst 인 경우 찾고자하는 경로는 /opt/Xilinx/12.1/ISE_DS/ISE입니다. 이 프로그램은 또한 예를 들어 /home/markus/Xilinx/10.1/ISE/bin/lin64/xst으로 찾을 수 있습니다. 자일링스는 이후 버전에서만 경로의 일부로 ISE_DS을 포함시켰다.

사실상 /bin/lin64/xst 부분 문자열은 설치에 따라 /bin/lin/xst 일 수 있기 때문에 간단히 삭제할 수 없습니다.

Makefile은 XILINX_PATH = $(shell which xst)과 같은 작업을 수행 할 수 있으며 위의 예에 따라이 문자열을 처리 할 수 ​​있지만이 작업은 깨끗한 방법으로 수행 할 수 없습니다.

XILINX_PATH_1 = $(shell which xst) 
XILINX_PATH_2 = $(subst /bin/lin64/xst,,${XILINX_PATH_1}) 
XILINX_PATH = $(subst /bin/lin/xst,,${XILINX_PATH_2}) 

더 나은 솔루션이 있습니까 :

내가 가지고 올 수있는 최선이 무엇입니까?

답변

0

이것은 작동하는 것 같다 :

XILINX_PATH = $(shell which xst | sed 's%bin\/lin\(64\)*/xst%%') 

주를 * 정말 정연의 이익을 위해 ?되어야한다,하지만 나는 문제가 해결 점점을 보내고 있습니다. 좀 더 실험을하고 해결하면 업데이트를 게시 할 것입니다.

편집 :
GNUMAKE의 비 오래된 버전 \? 대신 *의 작품을 사용하여 (또는 적어도 3.81에)과 더 정확합니다.

+0

굉장! 고맙습니다. 이것은 훨씬 나아 보인다. –