Я пишу Makefile, который должен определить каталог установленной программы, который можно найти в PATH
; или, так сказать, предполагается, что в PATH
.
Например: если двоичный файл - /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
например. Xilinx включил часть пути 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})
Есть ли лучшее решение?