Rumah  >  Artikel  >  Tutorial sistem  >  Pengoptimuman prestasi Linux Makefile: Bagaimana untuk meningkatkan kelajuan dan kecekapan kompilasi

Pengoptimuman prestasi Linux Makefile: Bagaimana untuk meningkatkan kelajuan dan kecekapan kompilasi

WBOY
WBOYke hadapan
2024-02-09 14:06:19873semak imbas

Makefile ialah format fail yang biasa digunakan dalam sistem Linux. Ia boleh digunakan untuk menerangkan proses penyusunan dan kebergantungan program, membolehkan pengguna menggunakan arahan make dengan mudah untuk membina dan mengurus program. Kelebihan Makefile ialah kesederhanaan, fleksibiliti dan mudah alih, tetapi ia juga mempunyai beberapa kelemahan, seperti kelajuan kompilasi yang perlahan, penggunaan sumber yang tinggi dan kompilasi berulang. Jadi, bagaimana untuk mengoptimumkan prestasi Makefile dan meningkatkan kelajuan dan kecekapan kompilasi di bawah Linux? Artikel ini akan memperkenalkan anda kepada beberapa kaedah pengoptimuman prestasi untuk Linux Makefiles, seperti menggunakan kompilasi selari, kompilasi tambahan, fail pengepala prapenyusun, caching hasil kompilasi, dsb., supaya anda boleh menggunakan dan menulis Makefiles dengan lebih baik di bawah Linux.

Linux Makefile 的性能优化:如何提高编译速度和效率

1. Kesan pengendali tugasan

Bagaimanakah dua operator tugasan ‘:=’ dan ‘=’ mempengaruhi kelajuan penyusunan? Rahsianya terletak pada maksud pentingnya Jika anda memahaminya dengan teliti, anda tidak akan mempunyai sebarang keraguan Blogger juga berfikir panjang dan mencari banyak maklumat Internet, dan akhirnya disedarkan oleh kata-kata catatan blog ini! Sila klik di sini untuk melihat catatan blog ini

  • = pengendali tugasan – pengembangan rekursif – pengembangan tertunda
    "=" bermaksud untuk mengembangkan keseluruhan Makefile sebelum menentukan nilai pembolehubah Iaitu, nilai pembolehubah akan menjadi nilai yang ditentukan oleh pengembangan rekursif terakhir dalam keseluruhan Makefile, tidak kira sama ada pembolehubah perantaraan yang dirujuknya. sebelum atau selepas peraturan sasaran dilaksanakan.

Contohnya adalah seperti berikut:

foo = $(bar)
bar = $(ugh)
ugh = $(Huh)

all:
    @echo $(foo)

Huh = AfterTarget
make之后其结果为 : AfterTarget
其整个执行过程如下:
    首先“$(foo)”被替换为“$(bar)”,
    接下来 “$(bar)”被替换为“$(ugh)”,
    “$(ugh)”被替换为“$(Huh)”,
    最后$(Huh)被替换为“AfterTarget”。
    整个替换的过程是在执行“echo $(foo)”是进行的。

Nota: Keseluruhan proses penggantian dilakukan apabila "echo $(foo)" dilaksanakan.

  • := pengendali tugasan – pengembangan terus – pengembangan segera
    ":=" bermaksud bahawa nilai pembolehubah ditentukan oleh kedudukannya dalam Makefile, dan bukannya nilai akhir selepas keseluruhan Makefile dikembangkan. Apabila menggunakan pengendali tugasan ini untuk mentakrifkan pembolehubah, rujukan kepada pembolehubah atau fungsi lain dalam nilai pembolehubah dikembangkan apabila ia ditakrifkan, iaitu, apabila ia ditakrifkan, pembolehubah itu sudah menjadi nilai akhir ungkapannya.

Contohnya adalah seperti berikut:

x := foo
y := $(x) bar
x := xyz

Dalam contoh di atas, nilai y akan menjadi foo bar dan bukannya bar xyz.


Di atas adalah penerangan asas bagi kedua-dua pengendali tugasan ini Berikut adalah penerangan terperinci tentang bagaimana ia mempengaruhi kelajuan penyusunan!

Contohnya adalah seperti berikut:

TmpDir = /Source  #此处随意定义了一个目录,
                  #但切记在实际编写的 Makefile 中,不要在赋值语句后面写注释,
                  #否则会把 /Source 到 # 之间的空格也算进去的。
                  #在下面引用该变量的时候实际上‘/Source_’最后还多了一个空格
                  #为了表示清楚,我用下划线表示空格,这样的目录肯定是不存在的

#以下语句调用了Shell函数,其结果是把指定目录下的所有源文件赋值给 x 变量,
#两者取其一运行make
#x := $(shell cd $(TmpDir); ls *.c)
x = $(shell cd $(TmpDir); ls *.c)

all:
    @echo $(x)
    @echo $(x)
    @echo $(x)
  1. := ialah penugasan pembolehubah segera, nilai telah ditentukan apabila ia ditakrifkan. Apabila melaksanakan make, nilai daripada = ialah penugasan pembolehubah tertunda yang hanya berkembang apabila pembolehubah digunakan. Apabila melaksanakan make, nilai x tidak dikembangkan apabila ia ditakrifkan, jadi @echo $(x) telah dilaksanakan tiga kali, dan fungsi Shell dipanggil setiap kali Akhirnya, fungsi Shell dipanggil tiga kali
  2. Melalui proses analisis di atas, anda seharusnya mempunyai idea yang jelas tentang bagaimana kedua-dua operator ini mempengaruhi kelajuan penyusunan.

Melalui artikel ini, anda harus mempunyai pemahaman asas tentang beberapa kaedah pengoptimuman prestasi Linux Makefile, dan mengetahui cara untuk meningkatkan kelajuan dan kecekapan kompilasi, seperti menggunakan kompilasi selari, kompilasi inkremental, fail pengepala yang telah disusun sebelumnya, keputusan kompilasi caching, dsb. Anda juga harus memahami prinsip dan kesan pengoptimuman prestasi Makefile, dan cara menggunakan dan mengkonfigurasi kaedah ini dengan betul di bawah Linux. Kami mengesyorkan bahawa apabila menggunakan Makefile, anda memilih kaedah pengoptimuman prestasi yang sesuai berdasarkan projek anda sendiri dan perlu meningkatkan kualiti binaan dan kelajuan program. Pada masa yang sama, kami juga mengingatkan anda untuk memberi perhatian kepada beberapa isu dan cabaran yang berpotensi apabila menggunakan Makefiles, seperti keserasian, kestabilan, kebolehselenggaraan, dsb. Saya harap artikel ini dapat membantu anda menggunakan sistem Linux dengan lebih baik dan membolehkan anda menikmati faedah dan kemudahan pengoptimuman prestasi Makefile di bawah Linux.

Atas ialah kandungan terperinci Pengoptimuman prestasi Linux Makefile: Bagaimana untuk meningkatkan kelajuan dan kecekapan kompilasi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:lxlinux.net. Jika ada pelanggaran, sila hubungi admin@php.cn Padam