Ini ialah arahan makepp_build_algorithm yang boleh dijalankan dalam penyedia pengehosan percuma OnWorks menggunakan salah satu daripada berbilang stesen kerja dalam talian percuma kami seperti Ubuntu Online, Fedora Online, emulator dalam talian Windows atau emulator dalam talian MAC OS.
JADUAL:
NAMA
makepp_build_algorithm -- Bagaimana makepp melaksanakan makefile
DESCRIPTION
Dalaman Makepp berbeza daripada standard Unix membuat dalam cara asas. Muka surat ini
menghuraikan falsafah yang berbeza secara terperinci.
Berbalik vs ke hadapan kesimpulan
Makepp berfungsi dalam arah yang bertentangan daripada standard Unix make. Buatan Unix tradisional
diberi sasaran untuk dibina, dan kemudian ia menemui peraturan yang sepadan dengan watak dalam
nama fail sasaran. Jika sasaran lebih tua daripada mana-mana kebergantungan peraturannya, maka ia
dibina semula.
Sebagai contoh, pertimbangkan peraturan corak ini:
%.o: %.cxx
$(CXX) $(CXXFLAGS) -c $(input) -o $(output)
Apabila membuat menyedari ia perlu membuat fail yang dipanggil "xyz.o", ia mencari melalui senarainya
peraturan corak sehingga ia melihat bahawa "xyz.o" sepadan dengan corak "%.o", dan kemudian ia digunakan
peraturan ini.
Makepp berfungsi dalam arah yang bertentangan. Ia mula-mula mengira semua fail yang mungkin
bina dengan menggunakan peraturan yang sepadan dengan aksara dalam nama fail kebergantungan. Jadi bila
ia perlu membina fail, ia hanya melihat sama ada ia adalah salah satu fail yang diketahuinya
bagaimana untuk membina. Senarai fail yang diketahui disimpan berdasarkan nama fail mutlak.
Apabila makepp menemui peraturan corak di atas, ia mencari semua fail dalam direktori
sepadan dengan corak "%.cxx" (iaitu, "*.cxx"). Untuk setiap fail ini, ia kemudian ingat
bahawa ia boleh menghasilkan fail ".o" yang sepadan. Jika kemudiannya makepp mendapati bahawa ia
boleh membuat fail ".cxx" lain yang tidak wujud pada masa ini, peraturan ini juga akan digunakan
dan fail ".o" yang sepadan akan ditanda.
Ini mungkin kelihatan agak tidak cekap, tetapi ternyata tidak begitu perlahan dalam kebanyakan kes,
dan selalunya benar bahawa hampir semua fail yang boleh dibina sebenarnya dibina.
Dan mengetahui senarai lengkap fail yang boleh dibina mempunyai beberapa kelebihan:
· Kad bebas boleh memadankan fail yang belum wujud tetapi boleh dibina.
· Fail pengepala yang telah dikesan oleh pengimbas kebergantungan automatik tidak mempunyai
untuk wujud; makepp tahu di mana mereka akan berada. (Kebanyakan penyelesaian lain untuk masalah ini
andaikan bahawa mana-mana pengepala yang belum wujud lagi berada dalam direktori semasa.)
· Repositori adalah lebih mudah untuk dilaksanakan kerana makepp mengetahui terlebih dahulu apa yang memfailkannya
boleh membuat. (Lihat makepp_repositories untuk butiran.)
· Adalah mungkin untuk menentukan dengan mudah fail yang boleh dibina (lihat
Fungsi "$(only_targets )".
· Fungsi "$(infer_objects)" Makepp sangat dipermudahkan dengan mengetahui objek apa
diperlukan.
Fail vs tekstual corak
Makepp bersekutu membina arahan dengan fail sasaran, bukan kepada corak teks untuk a
nama fail. Oleh itu, ia tidak dikelirukan dengan nama yang berbeza untuk fail yang sama. Justeru, untuk
contoh, makepp akan mengetahui bahawa "./xyz" dan dan "xyz" adalah fail yang sama, manakala yang lain membuat
utiliti mungkin tidak.
Ini amat penting kerana (tidak seperti make standard) makepp memuatkan makefiles
daripada direktori yang berbeza. Agar makefiles menjadi agak bebas, dengan
tiada kedudukan istimewa diberikan kepada makefile peringkat atas, setiap makefile merujuk kepada semua fail
berbanding dengan direktorinya sendiri. Oleh itu jika anda memuatkan fail make dari subdirektori
"other_stuff", dan makefile itu merujuk kepada "../xyz", makepp akan sekali lagi menyedari bahawa ia adalah
fail yang sama yang dirujuk di atas. (Ia juga tidak akan dikelirukan dengan direktori berpaut lembut
nama.)
Disimpan membina maklumat
Makepp menyimpan lebih banyak maklumat tentang setiap fail yang dibina melebihi tarikh sahaja
setem (itulah semua yang menjadi perhatian standard). Maklumat ini termasuk:
· Tandatangan fail ini pada binaan terakhir, jadi kita tahu sama ada fail itu sendiri mempunyai
berubah.
· Nama setiap fail kebergantungan, termasuk termasuk fail dan fail lain yang disimpulkan
secara automatik. Jika senarai ini berubah, maka makepp menganggap ia perlu membina semula.
· Tandatangan setiap tanggungan. Dengan cara ini, makepp tahu untuk membina semula bukan sahaja apabila
kebergantungan adalah lebih baharu daripada sasaran, tetapi apabila ia berubah sama sekali. Ini juga menjadikan
adalah mungkin untuk menggunakan jenis tandatangan lain, seperti jumlah semak kriptografi, sebaliknya
daripada tarikh fail.
· Seluruh arahan binaan (dan cwdnya). Dengan cara ini jika anda menukar arahan bina
(cth, tukar pilihan pengkompil), makepp tahu untuk membina semula walaupun fail
diri mereka tidak berubah.
· Seni bina. Jika anda telah menyusun atur cara anda pada Linux dan kemudian beralih ke
Solaris, makepp secara automatik tahu untuk menyusun semula segala-galanya.
Makepp membuat subdirektori dalam setiap direktori yang disentuhnya dipanggil ".makepp". The
membina maklumat untuk fail nama fail dalam direktori disimpan dalam .makepp/nama fail. Jika
anda memadamkan subdirektori ini atau mengubah fail, makepp akan membina semula semua fail yang terjejas.
Tersirat loading
Jika makepp cuba membina sasaran dalam direktori dan belum mempunyai peraturan untuknya,
atau jika ia mencari fail yang sepadan dengan kad bebas dalam direktori, ia akan melihat di dalamnya
direktori untuk melihat sama ada makefile hadir. Jika ya, makefile akan dimuatkan
secara automatik.
Ini bermakna anda biasanya tidak perlu memberitahu makepp secara eksplisit di mana untuk mencari
makefiles--apa yang anda perlu lakukan ialah merujuk fail dalam direktori lain, dan makepp akan
secara automatik memikirkan cara membinanya.
Pemuatan tersirat akan berlaku hanya jika direktori boleh ditulis kepada anda. Justeru jika anda mahu
menghalang makepp daripada cuba membina sekumpulan perkara yang tidak pernah berubah, cukup buat
direktori baca sahaja.
Pemuatan tersirat tidak akan berlaku jika anda berada di dalam pokok di bawah a RootMakeppfile(.mk) dan juga
makefile lain berada di luar pokok itu. Jika anda mahu ini sekali, anda boleh memberi
"--do-build=/" pilihan untuk makepp, untuk menjadikan segala-galanya di luar pokok boleh dibina. Jika awak
sentiasa mahu ini, anda boleh meletakkan pernyataan "load_makefile" di suatu tempat di dalam pokok itu
secara eksplisit menyambungkannya ke pokok.
Jika pemuatan tersirat menghalang anda (iaitu, makepp memuatkan terlalu banyak fail make dan ia membazir
masa, atau anda benar-benar tidak mahu ia cuba membina semula semua perkara yang diterangkan dalam
makefiles), anda boleh mematikannya untuk semua direktori menggunakan arahan "--noimplicit_load".
pilihan baris, atau anda boleh mematikannya untuk direktori terpilih menggunakan "no_implicit_load"
kenyataan dalam fail make anda.
Gunakan makepp_build_algorithm dalam talian menggunakan perkhidmatan onworks.net