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

7

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

例如,我有以下一组文件夹:

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

有不止一种方法可以做到这一点;最简单的方法是使用 wildcard 过滤列表。

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

1
两个想法;既然皮肤和语言环境文件夹是可选的,你需要将它们称为依赖项吗?如果需要,让构建命令来处理它们。所以可以这样写:
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)

如果你必须在依赖行上有正确的文件夹,以便捕获错误,我会编写一些宏来定义何时以及如何需要它们。然后相应地更新你的目标,只有在你知道它们是必需的时才需要这些目录。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接