【问题标题】:Makefile: ignore prerequisite if does not existMakefile:如果不存在则忽略先决条件
【发布时间】:2010-05-07 13:11:33
【问题描述】:

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

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

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 并只留下那些存在的?

【问题讨论】:

    标签: makefile prerequisites optional


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      两个想法;由于 skin 和 locale 文件夹是可选的,您是否需要将它们称为依赖项?如果需要,让构建命令处理它们。所以像:

      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)
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-09-24
        • 2014-03-08
        • 1970-01-01
        • 2023-03-23
        • 2021-01-10
        • 2023-03-06
        • 1970-01-01
        相关资源
        最近更新 更多