Makefile:如果不存在则忽略先决条件

时间:2010-05-07 13:11:33

标签: makefile prerequisites optional

有没有办法说如果不存在给定目标的先决条件,那么忽略该目标?

例如,我有以下文件夹

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 个答案:

答案 0 :(得分:4)

有多种方法可以做到这一点;最简单的方法是使用wildcard

过滤列表
chrome_src_folders  := $(wildcard $(chrome_src_folder)/content/*  \
    $(chrome_src_folder)/locale/* $(chrome_src_folder)/skin/*)

答案 1 :(得分: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)

如果你必须在依赖行上有正确的文件夹,那么你会发现错误,我会写一些宏来定义你需要它们的时间和方式。然后相应地更新目标,只在需要时才需要这些目录。