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

如何使用 GNU Make 建立具有相似規則的多個可執行檔?

Linda Hamilton
Linda Hamilton原創
2024-10-28 14:56:02937瀏覽

 How to Build Multiple Executables with Similar Rules Using GNU Make?

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

雖然Scons 是一個功能強大的建置工具,但實作所需的功能可能具有挑戰性。更直接的方法是利用 GNU Make,它可以輕鬆地從頂級和單一專案目錄進行建置和清理。

Makefile 設定

提供的 makefile啟用從 all_lessons 目錄和單一專案目錄進行建置和清理。每個項目的可執行檔均以其目錄命名。

專案結構

要實現此目的,您需要設定與提供的範例類似的專案結構:

all_lessons/
    helloworld/
        lesson.cpp
        main.cpp
    even_or_odd/
        lesson.cpp
        main.cpp
    calculator/
        lesson.cpp
        user_created_add.cpp
        main.cpp

Make內容

project.mk

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

Makefile用>

# project configuration

project_dirs := $(shell find * -maxdepth 0 -type d )
exes := $(foreach dir,${project_dirs},${dir}/${dir})

all : ${exes}

# 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 dependency files
-include $(foreach dir,${project_dirs},$(wildcard ${dir}/*.d))

從各個專案目錄建置

從頂層目錄建置

[project_directory]$ ln -s ../project.mk Makefile  # create a symlink
[project_directory]$ make

單一項目目錄

[all_lessons]$ make

清理所有項目

[project_directory]$ cd ..
[all_lessons]$ make clean

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn