Makefile: игнорировать предварительные требования, если не существует - PullRequest
6 голосов
/ 07 мая 2010

Можно ли сказать, что если предварительных условий для данной цели не существует, игнорировать эту цель?

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

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 и оставить только те, которые существуют?

Ответы [ 2 ]

4 голосов
/ 07 мая 2010

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

chrome_src_folders  := $(wildcard $(chrome_src_folder)/content/*  \
    $(chrome_src_folder)/locale/* $(chrome_src_folder)/skin/*)
1 голос
/ 07 мая 2010

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

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)

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

...