我發現我可以在Makefile中使用ifneq,我試圖比較0和命令統計的輸出:如果語句生成文件
@for f in `find $(PATH_PAGES) -name *.hbs`; do \
ifneq "`stat -c '%Y' $$f`" "0";
//some code here
endif
done
但在終端,我得到了一個錯誤:ifneq:命令不發現
有沒有不同的方式來比較這或者我做錯了什麼?
我發現我可以在Makefile中使用ifneq,我試圖比較0和命令統計的輸出:如果語句生成文件
@for f in `find $(PATH_PAGES) -name *.hbs`; do \
ifneq "`stat -c '%Y' $$f`" "0";
//some code here
endif
done
但在終端,我得到了一個錯誤:ifneq:命令不發現
有沒有不同的方式來比較這或者我做錯了什麼?
在這種情況下,你不想用化妝的ifneq
,因爲它的文本替換移交命令前殼,但你有一個殼循環,需要根據每個迭代做不同的事一個shell命令的輸出。
使用shell if
相反:如果你想,因爲如果你指定[TAB]那麼它是作爲外殼處理,用生成文件的,如果條件,那麼不應該有[TAB] if語句之前
if [ "`stat -c '%Y' $$f`" != "0" ]; then
//some code here
fi
謝謝!順便說一句,我添加了「然後」後,如果條件,它現在的作品。 –
@IvanShcherbakov,對,我忘記了。我編輯了答案:) – legoscia
這就是爲什麼你得到的錯誤,ifneq:command not found
它不在殼中。
可能是這樣Conditionals in Makefile: missing separator error? 可以在生成文件得到更好的理解幫助
'-c'不是便攜式選項來統計,所以我猜你是用它來確定是否該文件已被修改。 'make'在比較時間戳方面非常好,以確定依賴關係是否過時,並且讓'make'評估時間戳可能會更好。此外,你將需要線延續(可能更多分號),因爲make會將多行視爲多個命令。 –
那麼,我該如何讓'make'確定時間戳呢?在該循環中有一個命令,並且'make'總是在每個文件上調用這個命令,即使這個文件沒有被修改。因此,在那個循環中,我使用'touch'來更改時間戳,現在我想比較時間戳之後的時間,我使用'touch --date =「1970-01-01 03:00」$$ f;'和 知道這是可怕的解決方案,但我需要編輯該生成文件,這是我的第一天,所有這使得和makefiles) –