我現在有這個Makefile其中:與子目錄通用的makefile
- 查找所有* .F在它運行
- 看起來匹配的目錄*的.o指定子目錄(如Objets_dir定義)
- 編譯和鏈接
代碼:
# Paths
# -----
# Where to put the *.o
Objets_dir = temp\Win
# Where to check for the *.o
VPATH = $(Objets_dir)
# Where to put the resulting binary
Executable = D:\Documents\out.exe
# List of needed objects
Objets = $(patsubst %.f,%.o,$(wildcard *.f))
# Rules
# -----
F_compilo = gfortran
F_compilo_options = -O3 -ffpe-trap=invalid,zero,overflow -mfpmath=sse -fmax-errors=3
Link = x86_64-w64-mingw32-gfortran
Link_options =
# Let's go
# --------
# Compile (generation of .o)
%.o:%.f
$(F_compilo) $(F_compilo_options) -c $< -o $(Objets_dir)\[email protected]
# Link (generation of .exe)
$(Executable): $(Objets)
$(Link) $(Link_options) -o [email protected] $(addprefix $(Objets_dir)\, $(Objets))
有關信息,我正在使用mingw32-make來執行此Makefile。
我想編輯它,以便我可以指定一個子文件夾列表(除了當前文件夾外)尋找源文件(* .f)。它會有點不那麼通用,但我會很好。
這個makefile是我在幾年前從互聯網上收回的東西,除了添加一些註釋或編輯編譯標誌之外幾乎沒有碰過。 我想,需要編輯的行是帶有「通配符」調用的行,但我對Make語言完全(完全)無知。
你能建議如何編輯它嗎?
好吧,一切運行良好......除了每個子代中的所有文件都會重新編譯。我把'dirs'設爲'dirs:=。 aaa'。當前目錄中的所有.f文件都能正確找到,並且只有在需要時(如果已修改)才能重新編譯,這是預期的行爲。但是'aaa'目錄內的每次都會重新編譯。幫幫我 ? –
做了一些編輯。希望現在應該做正確的事情。 – Halzephron
謝謝。它似乎只適用於最後幾次編輯:儘管我在Windows上,但Sources的行定義必須是Sources:= $(foreach dir,$(dirs),$(通配符$(dir)/ *。f ))'(注意'/',而不是'\'),否則它不會找到任何源文件並停在那裏。 TempObjets = $(addprefix $(Objets_dir)/,$(notdir $(Objets)))''和'$(Objets_dir)/%。o:%。f'的修改相同。其他'''雖然:) –