首頁 > 後端開發 > C++ > 如何使用 GNU Make 從不同目錄高效建立具有相似規則的多個可執行檔?

如何使用 GNU Make 從不同目錄高效建立具有相似規則的多個可執行檔?

Linda Hamilton
發布: 2024-10-29 08:42:03
原創
747 人瀏覽過

How can GNU Make be used to efficiently build multiple executables with similar rules from different directories?

使用GNU Make 建立具有類似規則的可執行檔

作為Scons 的替代方案,GNU Make 可以成為您任務的有效解決方案。 GNU Make 可讓您透過其依賴解析系統定義靈活的建置流程。

GNU Make 方法

我們提供了兩個makefile,可以從頂部進行建置和清理-等級目錄(all_lessons)和單一專案目錄:

project.mk

all :
% : forward_ # build any target by forwarding to the main makefile
    $(MAKE) -C .. project_dirs=$(notdir ${CURDIR}) $@
.PHONY : forward_
登入後複製

Makefile

# one directory per project, one executable per directory
project_dirs := $(shell find * -maxdepth 0 -type d )

# executables are named after its directory and go into the same directory
exes := $(foreach dir,${project_dirs},${dir}/${dir})

all : ${exes}

#  the rules

.SECONDEXPANSION:

objects = $(patsubst %.cpp,%.o,$(wildcard $(dir )*.cpp))

# link
${exes} : % : $$(call objects,$$*) Makefile
    g++ -o $@ $(filter-out Makefile,$^) ${LDFLAGS} ${LDLIBS}

# compile .o and generate dependencies
%.o : %.cpp Makefile
    g++ -c -o $@ -Wall -Wextra ${CPPFLAGS} ${CXXFLAGS} -MD -MP -MF ${@:.o=.d} $<

.PHONY: clean

clean :
    rm -f $(foreach exe,${exes},$(call objects,${exe})) $(foreach dir,${project_dirs},$(wildcard ${dir}/*.d)) ${exes}

# include auto-generated dependency files
-include $(foreach dir,${project_dirs},$(wildcard ${dir}/*.d))
登入後複製

優點

  • 簡單性:GNU Make 簡單易懂,即使對初學者來說也是如此。
  • 可擴充性: Makefile 可以使用自訂目標和規則輕鬆擴充。
  • 可並行化: GNU Make 可以同時建立多個目標,進而提升大型專案的效率。
  • 自動依賴項追蹤: Make 自動偵測和更新依賴項,確保僅建立必要的目標。

用法

從個人建置專案目錄中,建立指向 project.mk 的符號連結作為該目錄中的 Makefile。從 all_lessons 目錄建置或清理將處理所有項目,而從項目目錄執行此操作只會影響該項目。

此方法提供了一種乾淨且靈活的方法,可以從不同目錄中建立具有類似規則的多個可執行檔。

以上是如何使用 GNU Make 從不同目錄高效建立具有相似規則的多個可執行檔?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板