Bolehkah GNU Make memperkemas membina banyak boleh laku dengan peraturan yang serupa merentas struktur direktori, membenarkan penyusunan daripada kedua-dua direktori utama dan folder projek individu?

Linda Hamilton
Lepaskan: 2024-10-27 16:07:02
asal
877 orang telah melayarinya

Can GNU Make streamline building numerous executables with similar rules across a directory structure, allowing compilation from both the main directory and individual project folders?

Membina Berbilang Boleh Laku dengan Peraturan Serupa Menggunakan GNU Make

Soalan:

Bolehkah GNU Make memudahkan membina berbilang boleh laku dengan peraturan yang serupa dalam struktur direktori, membolehkan penyusunan daripada kedua-dua direktori utama dan direktori projek individu?

Jawapan:

Ya, GNU Make boleh mengendalikan tugasan ini dengan pendekatan yang ringkas dan cekap. Di bawah ialah dua makefiles yang melaksanakan fungsi yang diingini:

project.mk:

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

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))
Salin selepas log masuk

Penggunaan:

  • Buat pautan simbolik bernama Makefile to project.mk dalam setiap direktori projek.
  • Untuk membina projek tertentu, navigasi ke direktori projek dan jalankan make.
  • Untuk membina semua projek, jalankan make dari direktori utama (semua_pelajaran).
  • Untuk membersihkan projek tertentu, jalankan make clean daripada direktori projek.
  • Untuk membersihkan semua projek, jalankan make clean dari direktori utama.

Kelebihan:

  • Mudah untuk dilaksanakan dan sesuai untuk keperluan yang ditetapkan.
  • Menyokong pembinaan dan pembersihan daripada kedua-dua direktori utama dan direktori projek.
  • Menjana kebergantungan secara automatik dan boleh selari sepenuhnya.

Atas ialah kandungan terperinci Bolehkah GNU Make memperkemas membina banyak boleh laku dengan peraturan yang serupa merentas struktur direktori, membenarkan penyusunan daripada kedua-dua direktori utama dan folder projek individu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!