我試圖創建一個依賴的文件列表上的目錄中的目標名稱目標:目標通配符shell命令
bin/%.out: src/%/ $(shell find src/%/* -type f -iname '*.cpp' -o -iname '*.hpp')
# Build stuff here
然而shell find src/%/* ...
最終擴展到shell find src//* ...
。起初,我認爲這是因爲我只能有1個目標通配符,但即使在刪除src/%/
依賴關係之後,它也會出現同樣的問題。
更多的上下文:我的目錄包含一個'src'目錄,其中包含目錄。 'src'的每個子目錄我被視爲「項目」。當我構建時,所有的目標文件應該在out/src/projname
。我試圖使用find
以遞歸方式獲取每個項目的所有源文件和頭文件。所有二進制文件將在bin/projname.out
中進行,因此,主要依賴項爲bin
中的.out
文件,它們的名稱與其項目名稱相同。 (如果src/abc
存在,bin/abc.out
是all
的依賴關係)。
因此,對於src
中的每個子目錄,將編譯所有源文件,並將目標文件移動到out/projname
,最終這些文件將鏈接到bin/projname.out
。
- SRC
- proj0
- CPP/HPP文件
- proj1
- CPP/HPP文件
- proj0
- 出
- SRC
- proj0
- 目標文件
- proj1
- 目標文件
- proj0
- SRC
- 斌
- proj0.out
- proj1。出
目前獲得的項目和輸出文件的清單列表如下:
SRCS := $(shell find src/* -maxdepth 0 -type d)
SRCS_OUT := $(patsubst src/%,bin/%.out,$(SRCS))
...
all: out/ bin/ $(SRCS_OUT)
項目可以包含子目錄和這樣的,這就是爲什麼我在使用find
代碼在最上面。
我可以使用宏並傳遞%給它,只是從宏返回整個部分? – Matthew
這不起作用。你可以使用一些技巧來填充你想要的所有源文件的變量,但是如果你可以給出一些上下文,我認爲會有更好的/更乾淨的解決方案。 –
好吧,我已經更新了這個問題,希望提供一些更有用的信息。 – Matthew