簡體   English   中英

Makefile 根據目標更改后綴規則

[英]Makefile change suffix rule based on target

目前,我的 Makefile 中有兩組標志。如果我想優化我的程序或者如果我想要更多調試信息(見下文),我會注釋掉一組。

FC = gfortran
# I switch between having one of the following two lines commented
# FFLAGS = -Og -Wall -Wextra -fcheck=all -fbacktrace -fbounds-check
FFLAGS = -O3
MOD='Modules/'

SRC  = Modules/pyplot_module.f90
SRC += Modules/logs.f90
SRC += program.f90
OBJ  = ${SRC:.f90=.o}

%.o: %.f90
    $(FC) -c -J${MOD} $< $(FFLAGS) -o $@

program: $(OBJ)
    $(FC) -J${MOD} $(FFLAGS) -o $@ $(OBJ)

remake: remove program

clean:
    rm -f **/*.o **/*.mod

remove: clean
    rm -f program

有沒有一種方法可以有兩種不同的后綴規則,並根據我調用的目標使用特定的后綴規則。 我想要像下面顯示的那樣的東西。 我懷疑這是一個 XY 問題,但我不知道如何解決這個問題。

FC = gfortran
# Notice changes here
DEBUGFFLAGS = -Og -Wall -Wextra -fcheck=all -fbacktrace -fbounds-check
FFLAGS = -O3
MOD='Modules/'

SRC  = Modules/pyplot_module.f90
SRC += Modules/logs.f90
SRC += program.f90
OBJ  = ${SRC:.f90=.o}

%.o: %.f90
    $(FC) -c -J${MOD} $< $(FFLAGS) -o $@

%.o: %.f90 # I want this suffix rule to be used only when program-debug target is made
    $(FC) -c -J${MOD} $< $(DEBUGFFLAGS) -o $@

program-optimized: $(OBJ)
    $(FC) -J${MOD} $(FFLAGS) -o $@ $(OBJ)

program-debug: $(OBJ)
    # But I also want the SRC files to be compiled with these flags aswell 
    $(FC) -J${MOD} $(DEBUGFFLAGS) -o $@ $(OBJ)

remake: remove program

clean:
    rm -f **/*.o **/*.mod

remove: clean
    rm -f program

您可以使用特定於目標的變量來執行此操作,如下所示:

DEBUGFFLAGS = -Og -Wall -Wextra -fcheck=all -fbacktrace -fbounds-check
FFLAGS = -O3

EXTRAFLAGS =

%.o: %.f90
         $(FC) -c -J${MOD} $< $(FFLAGS) $(EXTRAFLAGS) -o $@

program-optimized program-debug: $(OBJ)
         $(FC) -J${MOD} $(FFLAGS) $(EXTRAFLAGS) -o $@ $(OBJ)

program-debug: EXTRAFLAGS = $(DEBUGFLAGS)  # this is the magic

然而,這是一個壞主意。

問題是 make 不會在您更改標志時重建您的 object 文件,它只會在文件被編輯時重建。 因此,無論何時運行make ,您都可能混合使用優化選項和調試選項編譯的 object 個文件,除非您在構建之間完全清除所有 object 個文件,否則您永遠不會知道哪些是哪個。

更好的方法是創建一個單獨的子目錄來保存為調試和優化構建的 object 文件,這樣它們就不會相互沖突。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM