2010-05-07 75 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/*)