0
我有一個變量$(target)
GNU做:檢查文件是否是一個目錄
我建造這個變量$(target_dir)
的條件是:
- 如果
target
是本地目錄,那麼target_dir
是curr_dir/target
- 如果
target
是不本地目錄,然後target_dir
是curr_dir
目前我使用$(wildcard ...)
檢查curr_dir/target
存在:
target_as_dir := $(shell pwd)/$(target)
target_is_dir := $(if $(wildcard $(target_as_dir)),1,)
target_dir := $(if $(target_is_dir),$(target_as_dir),$(shell pwd))
然而,這種摔倒在以下情況下
src/
+--- foo/
+-- makefile
+-- foo.cc
+-- foo -> ../build/foo/foo (this is a symlink)
我在src/foo
,和$(target) = foo
我$(wildcard)
上述聲明的foo
符號鏈接,我不希望它做的匹配。
我需要它匹配只有當它是一個目錄。任何其他文件系統類型都不應該匹配。
- 我怎樣才能找到如果
curr_dir/target
是一個目錄,而不是其他文件?
你的意思是'foo'是一個目錄的符號鏈接,但是你不希望它匹配到那個時候?或者,如果'foo'是一個目錄的符號鏈接,但如果'foo'是一個文件的符號鏈接則不行? – MadScientist
不,「foo」符號鏈接只能是文件的符號鏈接。我已經意識到這可以像在通配符檢查中在'target_as_dir'末尾添加'。/'一樣簡單地解決:例如:'$(if $(wildcard $(target_as_dir)/。),1,)' –
正確。這就是我想知道的原因,因爲如果你需要知道它是否是符號鏈接本身,而不是符號鏈接指向的內容,那就更困難了。實際上很少有UNIX工具讓你看到符號鏈接本身的類型,它們幾乎都默認遵循符號鏈接,並向你展示它指向的東西。如果你的系統有'stat'(大部分都是),這是你最好的選擇。但是你必須使用'$(shell ...)'來使用它;使自己永遠無法分辨符號鏈接和它指向的區別。 – MadScientist