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