Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Membina Berbilang Boleh Laksana dengan Peraturan Serupa Menggunakan GNU Make?

Bagaimana untuk Membina Berbilang Boleh Laksana dengan Peraturan Serupa Menggunakan GNU Make?

Linda Hamilton
Lepaskan: 2024-10-28 14:56:02
asal
942 orang telah melayarinya

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

Membina Berbilang Boleh Laksana dengan Peraturan Serupa Menggunakan GNU Make

Walaupun Scons ialah alat binaan yang berkebolehan, melaksanakan fungsi yang diingini mungkin mencabar. Pendekatan yang lebih mudah ialah menggunakan GNU Make, yang membolehkan pembinaan dan pembersihan mudah daripada kedua-dua direktori projek peringkat atas dan individu.

Persediaan Makefile

Fail make yang disediakan membolehkan pembinaan dan pembersihan daripada kedua-dua direktori all_lessons dan direktori projek individu. Boleh laku setiap projek dinamakan sempena direktorinya.

Struktur Projek

Untuk mencapainya, anda perlu menyediakan struktur projek yang serupa dengan contoh yang diberikan:

all_lessons/
    helloworld/
        lesson.cpp
        main.cpp
    even_or_odd/
        lesson.cpp
        main.cpp
    calculator/
        lesson.cpp
        user_created_add.cpp
        main.cpp
Salin selepas log masuk

Kandungan Makefile

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

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

Penggunaan

Membina daripada Direktori Projek Individu

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

Membina daripada Direktori Peringkat Atas

[all_lessons]$ make
Salin selepas log masuk

Membersihkan Direktori Projek Individu

[project_directory]$ cd ..
[all_lessons]$ make clean
Salin selepas log masuk

Membersihkan Semua Projek

Atas ialah kandungan terperinci Bagaimana untuk Membina Berbilang Boleh Laksana dengan Peraturan Serupa Menggunakan GNU Make?. 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