簡體   English   中英

Linux make:makefile 更改時需要重建文本文件

[英]Linux make: Need to rebuild a text file when makefile changes

我繼承了 Linux C++ 應用程序和 makefile。 在現有的 makefile 中,它具有如下代碼:

APPVER=5.01
REL=B

$(APP): $(OBJS) $(MAKEFILE)
          echo $APPVER > .sw_ver.txt
          echo " " >> .sw_ver.txt
          echo $REL >> .sw_ver.txt
          $(LD) $(OBJS) $(LDFLAGS) -o $(APP)

在運行時,應用程序將打開此文本文件並顯示其版本。

本着 Make 的精神,每次文件感覺不對時都重建那個.sw_ver.txt 所以我把它分解如下:

APPVER=5.01
REL=B

$(APP): $(OBJS) $(MAKEFILE) .sw_ver.txt
          $(LD) $(OBJS) $(LDFLAGS) -o $(APP)

.sw_ver.txt: $(MAKEFILE)
          echo $APPVER > .sw_ver.txt
          echo " " >> .sw_ver.txt
          echo $REL >> .sw_ver.txt

腳步:

  1. make -B :它執行步驟,創建文本文件並更新應用程序。
  2. 做一些更新 Makefile
  3. make :這里說不需要更新文本文件並修剪規則。

我希望它看到 Makefile 已更改,因此去更新文本文件。 但事實並非如此。

我嘗試添加一個虛擬文件,但它說似乎被修剪了。

我想要做的是,如果Makefile 已更改(認為可能APPVERREL已更改),則重建.sw_ver.txt文件。

你有什么建議嗎?

謝謝

======編輯#1

嗨,所以我嘗試了另一種方法,將版本信息移到文件中,而不是在 make 運行期間嘗試創建文件。 由於我繼承了這些東西,我試圖盡可能少地改變。

只是為了瑣事,知道原始問題是否有答案會很有趣。

再次感謝

文件 .sw_ver.txt

5.01 B

生成文件:

$(APP): $(OBJS) $(MAKEFILE) .sw_ver.txt
          $(LD) $(OBJS) $(LDFLAGS) -o $(APP)

.sw_ver.txt: $(MAKEFILE)

======編輯#2

我說得太快了。 如果更改了任何OBJS則此設置有效,但如果更改Makefile本身,則此設置不起作用。

那么,善良的陌生人......有什么想法嗎? 謝謝

當我嘗試時,似乎$(MAKEFILE)是一個空變量。 嘗試僅用文字文件名Makefile替換它。

順便說一下,我通過將echo $(MAKEFILE)添加到我的規則之一來解決這個問題。

有兩點需要澄清:

  1. MAKEFILE不是隱式內置變量。 因此,如果您不設置其值,則它不包含任何內容。 (您可以在沒有Makefile 的目錄中運行make -p以查看那里有哪些變量。請參閱https://www.gnu.org/software/make/manual/html_node/Implicit-Variables.html
  2. 基於上面的原因,由於你的$(MAKEFILE)是空的,當它擴展時, .sw_ver.txt就變成了沒有先決條件的規則。 因此,如果.sw_ver.txt已經存在,則.sw_ver.txt任何操作來重新生成它。 你得到的實際上是這個(注意你的語法$APPVER$REL實際上也是錯誤的):
     .sw_ver.txt: # $(MAKEFILE) is empty echo PPVER > .sw_ver.txt # $(A) is empty echo " " >> .sw_ver.txt echo EL >> .sw_ver.txt # $(R) is empty

所以你需要做的是:

  1. 給你的MAKEFILE變量一個值。
     MAKEFILE := Makefile
  2. 修正你的語法:
     .sw_ver.txt: $(MAKEFILE) echo $(APPVER) > $@ echo " " >> $@ echo $(REL) >> $@

執行此操作后,您應該能夠在更新 Makefile 時重新生成 .sw_ver.txt。

暫無
暫無

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

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