2010-05-07 3 views
4

Есть ли способ сказать, что если предпосылка для данной цели не существует, то игнорировать эту цель?Makefile: игнорировать предпосылку, если не существует

Например, у меня есть следующий набор папок

chrome_src_folders := $(chrome_src_folder)/content/* \ 
       $(chrome_src_folder)/locale/* $(chrome_src_folder)/skin/* 

Здесь я использую его

$(jar_path): $(chrome_src_folders) 
    zip -urq $(jar_path) $(chrome_src_folders)  

В основном кожа или локаль может очень хорошо не быть там, что даст мне хорошая ошибка. Как избежать этой ошибки и сделать обязательным chrome_src_folders? или я должен каким-то образом фильтровать chrome_src_folders и оставить только те, которые существуют?

ответ

0

Две мысли; Поскольку папки скинов и локалей являются необязательными, нужно ли их называть их зависимыми? Пусть команды сборки заботятся о них, если им нужно. Так что-то вроде:

chrome_content_folder := $(chrome_src_folder)/content/* 
chrome_content_optional := $(chrome_src_folder)/locale/* $(chrome_src_folder)/skin/* 

$(jar_path): $(chrome_content_folder) 
    zip -urq $(jar_path) $(chrome_content_folder) $(chrome_content_optional) 

Если вы должны иметь правильные папки на линии зависимости, так что вы отлавливать ошибки, я хотел бы написать несколько макросов, которые определяют, когда и как вы в них нуждаетесь. Затем обновите свои объекты, чтобы они требовали только эти каталоги, когда вы знаете, что они требуются.

3

Существует несколько способов сделать это; наиболее простым является отфильтровать список, используя wildcard

chrome_src_folders := $(wildcard $(chrome_src_folder)/content/* \ 
    $(chrome_src_folder)/locale/* $(chrome_src_folder)/skin/*) 
Смежные вопросы