2015-12-05 21 views
0

錯誤,所以我正在寫一個一般的makefile編譯C/C++程序。有一些可以填寫的變量,我想讓它們保持空白。但是,如果我離開他們的空白,它會導致在外殼搜索我在Makefile的空白論點引起外殼

如後來的一些錯誤:

FILESDIR = 
FILES = $(shell find $(FILESDIR) -type -f -name "*.cpp") 
NOTFILES = $(shell find . -not -path *$(FILESDIR)* -type f - name "*.cpp") 

然而,這將拋出一個錯誤。我猜這是因爲shell行被評估爲shell find -type -name "*.cpp",這在語法上是錯誤的。

我目前的解決辦法是分配FILESDIR = /dev/null,但我希望能夠留空白。

我怎樣才能檢查,或更好的我的shell搜索,因此它可以容納空行?

+0

如果沒有要處理的文件,什麼情況下有效? –

+0

我有一些第三方的東西,不需要每次'make clean'重新編譯。所以它幾乎建立了一個「忽略」文件。但這並不總是適用。 – HalfBit

+0

在一個不存在的目錄中查找文件是什麼意思?如果我請你列出所有的長頸鹿,如果你回答我的問題是荒謬的,我不應該感到驚訝。 – msw

回答

1

這個貼的makefile內容:

FILESDIR = 
FILES = $(shell find $(FILESDIR) -type -f -name "*.cpp") 
NOTFILES = $(shell find . -not -path *$(FILESDIR)* -type f - name "*.cpp") 

有一些問題,因爲你已經注意到了。

更好的實現可能是:

FILESDIR = .  
FILES := $(wildcard $(FILESDIR)/*.cpp) 
NOTFILES := $(shell find . -not -path *$(FILESDIR)/* -type f -name "*.cpp") 

然後宏FILESDIR可以通過在化妝調用線-D參數覆蓋。

+0

將''通配符'搜索遞歸? – HalfBit

+0

'wildcard'是'make'內建插件之一。沒有指定目錄,它搜索當前目錄,並指定一個目錄,它將搜索該目錄。它不會對子目錄執行遞歸搜索。建議閱讀'make'實用程序的教程,例如: user3629249