Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah GNU Make boleh digunakan untuk membina berbilang boleh laku dengan cekap dengan peraturan serupa daripada direktori berbeza?

Bagaimanakah GNU Make boleh digunakan untuk membina berbilang boleh laku dengan cekap dengan peraturan serupa daripada direktori berbeza?

Linda Hamilton
Linda Hamiltonasal
2024-10-29 08:42:03740semak imbas

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

Membina Executable dengan Peraturan Serupa Menggunakan GNU Make

Sebagai alternatif kepada Scons, GNU Make boleh menjadi penyelesaian yang cekap untuk tugas anda. GNU Make membenarkan anda mentakrifkan proses binaan yang fleksibel melalui sistem resolusi pergantungannya.

GNU Make Approach

Kami membentangkan dua makefiles yang membolehkan pembinaan dan pembersihan dari kedua-dua bahagian atas -direktori peringkat (semua_pelajaran) dan direktori projek individu:

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))

Kelebihan

  • Kesederhanaan: GNU Make adalah mudah dan mudah difahami, walaupun untuk pemula.
  • Kelanjutan: Makefiles boleh diperluaskan dengan mudah dengan sasaran dan peraturan tersuai.
  • Boleh selari: GNU Make boleh membina berbilang sasaran serentak, menjadikannya cekap untuk projek besar.
  • Penjejakan Ketergantungan Automatik: Buat kebergantungan pengesanan dan kemas kini secara automatik, memastikan bahawa hanya sasaran yang diperlukan dibina.

Penggunaan

Untuk membina daripada individu direktori projek, buat pautan simbolik ke project.mk sebagai Makefile dalam direktori itu. Membina atau membersihkan daripada direktori all_lessons akan memproses semua projek, manakala berbuat demikian daripada direktori projek hanya akan menjejaskan projek itu.

Pendekatan ini menyediakan cara yang bersih dan fleksibel untuk membina berbilang boleh laku dengan peraturan yang serupa daripada pelbagai direktori.

Atas ialah kandungan terperinci Bagaimanakah GNU Make boleh digunakan untuk membina berbilang boleh laku dengan cekap dengan peraturan serupa daripada direktori berbeza?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn