InggrisPerancisSpanyol

favorit OnWorks

makepp - Online di Cloud

Jalankan makepp di penyedia hosting gratis OnWorks melalui Ubuntu Online, Fedora Online, emulator online Windows, atau emulator online MAC OS

Ini adalah perintah makepp yang dapat dijalankan di penyedia hosting gratis OnWorks menggunakan salah satu dari beberapa workstation online gratis kami seperti Ubuntu Online, Fedora Online, emulator online Windows atau emulator online MAC OS

PROGRAM:

NAMA


makepp -- Pengganti yang kompatibel tetapi ditingkatkan untuk make

RINGKASAN


makepp [ -e ] [ -C dir ] [ -F makefile] [ -F makefile_atau_dir ]
[ -J n] [ -k ] [ -m metode ] [ --noremake-makefiles ]
[ --sekarang ] [ -q ] [ -R dir] [ --pembuatan-tradisional-rekursif ]
[ -v ] [ --versi ] [ VAR=nilai ... ] [ target ... ]

mpp [-pilihan] [ VAR=nilai ... ] [ target ... ]

DESKRIPSI


Makepp, program build yang memiliki sejumlah fitur yang memungkinkan build andal
file build yang lebih sederhana, adalah pengganti drop-in untuk GNU make. Ini mendukung hampir semua
sintaks yang didukung oleh GNU, dan dapat digunakan dengan makefile yang diproduksi oleh utilitas seperti:
sebagai pembuat mobil. Ini disebut makepp (atau buat++) karena dirancang dengan dukungan khusus
untuk C++, yang telah diperluas ke bahasa lain seperti Swag atau SQL yang disematkan. Juga
hubungannya dengan membuat analog dengan hubungan C++ dengan C: hampir 100%
kompatibel ke belakang tetapi menambahkan sejumlah fitur baru dan cara menulis yang jauh lebih baik
makefile.

Makepp melewati rangkaian pengujian yang ekstensif, dan digunakan di beberapa proyek besar. Jika Anda memiliki
masalah apa pun dengan versi CVS terbaru, teriak, dan kami akan mencoba memperbaikinya dengan cepat. Makepp
berjalan dengan versi Perl apa pun sejak 5.8.

Halaman manual berikut berisi informasi lebih lanjut tentang cara menggunakan makepp:

Tutorial
Cara menulis makefile. Ini sebagian besar ditujukan untuk seseorang dengan sedikit atau tanpa
pengalaman menggunakan implementasi make.

Tutorial Kompilasi
Apa yang dilakukan perintah kompilasi Unix.

Rilis Catatan
Apa yang berubah dengan setiap rilis.

Inkompatibilitas
Apa yang bekerja secara berbeda antara GNU make dan makepp.

Percepatan
Berbagai tips untuk membuat makepp berjalan lebih cepat.

Performa Perl
Berbagai tips untuk membuat pemrograman Perl (dalam makefile Anda dan di tempat lain) pergi
lebih cepat.

Buku masak
Jawaban cepat untuk "Bagaimana saya ...?" atau "Apa cara terbaik untuk ...?"

FAQ Jawaban cepat atas pertanyaan yang ditemukan orang.

Membangun Algoritma
Bagaimana algoritma build makepp berbeda secara mendasar dari make tradisional.

Bangun Cache
Cache build adalah direktori yang menyimpan hasil build sebelumnya jika ada
diperlukan lagi di direktori yang sama, atau di build terpisah di direktori berbeda.

Membangun Metode Pemeriksaan
Bagaimana makepp memutuskan kapan harus membangun.

Perintah bawaan
Perintah yang kuat dan efisien tersedia di mana pun makepp 2.0 atau yang lebih baru.

Aturan bawaan
Untuk program yang sangat sederhana, Anda mungkin tidak memerlukan makefile sama sekali! Ini adalah bawaannya
aturan yang makepp tahu tentang.

kecocokan
Di mana dan dengan versi Perl makepp apa yang berfungsi.

Memperluas
Bagaimana Anda dapat menambahkan fungsi ke makepp dengan menulis kode Perl Anda sendiri.

Fungsi
Fungsi untuk manipulasi teks dan berbagai keperluan lainnya.

Repositori
Repositori adalah teknik yang menyederhanakan pembuatan varian dan mempertahankan pusat
kumpulan sumber.

Peraturan
Menentukan aturan untuk membangun file.

Kotak pasir
Menggunakan kotak pasir untuk mempartisi build.

Scanning
Bagaimana makepp memindai dependensi seperti sertakan file.

Tanda tangan
Bagaimana makepp memutuskan kapan file telah berubah.

Laporan
Arahan tambahan untuk mengontrol makepp.

Variabel
Menggunakan variabel untuk menyederhanakan aturan.

makepp, mpp
Sintaks baris perintah dari utilitas utama.

makeppclean, mppc
Skrip pembersihan mandiri yang efisien untuk menghapus file yang dihasilkan oleh makepp.

makeppgraph, mppg
Utilitas yang berdiri sendiri untuk menganalisis dependensi secara grafis dan alasan untuk a
membangun kembali.

makeppinfo, mppi
Utilitas yang berdiri sendiri untuk membuang info build yang diingat makepp tentang masing-masing
file.

makeplog, mppl
Utilitas yang berdiri sendiri untuk menganalisis dependensi dan alasan untuk membangun kembali.

makepreplay, mppr
Utilitas yang berdiri sendiri untuk mengulangi hal-hal yang telah dilakukan makepp, tetapi jauh lebih cepat.

Indeks
Semua kata kunci, fungsi, dan operator di makepp.

Fitur
Pemindaian otomatis untuk menyertakan file
Makepp memindai secara otomatis untuk menyertakan file. Ini meniadakan kebutuhan akan alat seperti
tergantung. Pemindai Makepp berfungsi meskipun file yang disertakan belum ada tetapi
harus dibangun. (Ini benar tidak peduli dari mana asalnya di jalur penyertaan,
tidak seperti program yang bergantung pada opsi "-MM -MG" gcc.) Makepp memiliki sistem yang fleksibel
untuk melakukan ini berdasarkan pemindaian perintah build; Anda dapat menyesuaikannya untuk
bahasa lain atau membuat perintah dengan menulis subrutin Perl.

Sistem yang lebih baik untuk build hierarkis
Makepp memiliki sistem yang lebih baik untuk menangani build yang melibatkan banyak direktori dan
beberapa makefile. Teknik tradisionalnya adalah membuat panggilan itu sendiri
secara rekursif di setiap direktori. Tergantung pada seberapa rumit interdependensi
adalah, beberapa lintasan rekursif terkadang diperlukan. Ini membuat makefiles sangat
rumit jika mereka menjamin bangunan yang benar. Masalah sebenarnya adalah bahwa kecuali
dependensinya sepele (misalnya, hanya satu file perpustakaan), hampir tidak mungkin untuk
mengekspresikan dependensi target secara akurat dalam satu makefile dalam hal target dari
makefile lainnya. Unix make tidak cukup pintar untuk menyadari bahwa target dalam satu
makefile bergantung pada file yang menjadi target di makefile tingkat rendah; tidak bisa mengambil
membangun perintah dari makefile tingkat rendah saat mencoba membangun target di
makefile tingkat atas. Jadi solusi yang biasa adalah membangun segala sesuatu yang bisa
dibangun dengan makefile tingkat rendah, berharap itu cukup untuk membangun semuanya
yang diperlukan untuk makefile tingkat atas.

Makepp memuat semua makefile yang dibutuhkan sekaligus, jadi tidak ada masalah untuk menanganinya
situasi di mana file dari satu makefile tergantung pada file yang dihasilkan oleh yang berbeda
makefile. Makepp cd secara otomatis ke direktori yang berisi makefile sebelumnya
mengeksekusi perintah dari makefile, sehingga setiap makefile dapat ditulis secara independen
tanpa sepengetahuan direktori build tingkat atas. Tetapi jika akses ke root Anda
build tree itu penting (misalnya karena di situlah direktori include Anda berada),
Anda dapat memberi nama makefile di direktori itu secara khusus. Kemudian makepp memberi Anda jalan
ke direktori itu dalam sebuah variabel.

Makepp juga dapat mengetahui di mana semua makefile untuk seluruh proyek berada tanpa
diberitahu, jika setiap makefile berada di direktori yang sama dengan file yang seharusnya
menghasilkan. Ini juga dapat sangat menyederhanakan makefile.

Untuk detail lebih lanjut tentang membangun dengan banyak direktori, lihat "Kiat untuk banyak"
direktori" di makepp_cookbook.

Wildcard yang andal
Makefile dapat menggunakan wildcard dengan andal, karena wild card cocok dengan salah satu file yang
ada, or file yang belum ada tetapi makepp tahu cara membuatnya. Jadi bahkan untuk
program dengan lusinan modul, seluruh makefile Anda dapat dengan mudah membaca sesuatu seperti
ini:

CXX = g++
CXXFLAGS = -g

%.o : %.c
$(CXX) $(CXXFLAGS) -c $(masukan) -o $(keluaran)

program_saya: *.o
$(CXX) $(masukan) -o $(keluaran)

dan ini akan berfungsi bahkan jika belum ada file ".o" yang dibuat.

Build yang andal: mengingat perintah build
Makepp melacak perintah build, sehingga jika opsi kompilasi berubah, file
secara otomatis dibangun kembali. Ini penting untuk menjamin build yang benar. (Ide ini
diambil dari utilitas "kontra" Bob Sidebothem, yang dijelaskan dalam Perl
Jurnal pada tahun 1998 dan tersedia dari CPAN.)

Untuk mengilustrasikan mengapa ini penting, pertimbangkan definisi struktur berikut:

kelas ABC {
intx;
#ifndef SPECIAL_OPTION
ke dalam kamu;
#berakhir jika
ke dalam z;
};

Sekarang anggaplah Anda memutuskan untuk mengaktifkan opsi "SPECIAL_OPTION" dengan menambahkan
"-DSPECIAL_OPTION" ke baris perintah. Diperlukan kompilasi ulang dari semuanya, tapi
merek Unix tradisional tidak akan mendeteksi ini, dan hanya akan mengkompilasi ulang file sumber
yang sebenarnya telah berubah. Akibatnya, beberapa modul Anda akan dikompilasi dengan
-DSPECIAL_OPTION, dan yang lainnya tidak. Setelah sesi debugging yang sangat membuat frustrasi, Anda
akan menemukan bahwa semua yang perlu dilakukan adalah membangun kembali semuanya. Maka Anda akan
kutukan make dan mudah-mudahan beralih ke implementasi yang lebih baik, seperti makepp. Pada
setidaknya, itulah yang saya lakukan.

Sebagai contoh lain, misalkan Anda sedang mengerjakan proyek yang cukup bagus
debugged, jadi biasanya dikompilasi dengan "-O2". Sekarang Anda mengalami bug yang Anda butuhkan
untuk melihat di debugger. Kode yang dikompilasi dengan pengoptimalan sulit untuk diperiksa
di debugger, jadi Anda ingin mengkompilasi ulang kode Anda sehingga Anda bisa melihatnya. Jika
makefile Anda diatur untuk menyimpan opsi kompiler dalam variabel biasa, Anda dapat
lakukan saja ini:

makepp CFLAGS=-g CXXFLAGS=-g

dan makepp akan tahu bahwa baris perintah telah berubah untuk semua modul. Lalu kapan
Anda telah menemukan bug Anda, ketik saja

makepp

dan itu akan dikompilasi ulang dengan optimasi. Anda tidak perlu mengetik "make clean" saat
Anda mengubah opsi build.

Beberapa makefile (misalnya, untuk kernel Linux) berusaha keras untuk memaksa
kompilasi ulang ketika perintah kompilasi berubah. Dengan makepp, itu diurus
secara otomatis--Anda tidak perlu melakukan apa pun.

Bangunan yang andal: pencocokan tanda tangan yang tepat
Secara default, makepp tidak hanya memastikan bahwa semua target lebih baru dari semua
dependensi; jika Anda mengganti dependensi dengan file yang lebih lama, makepp tahu bahwa itu ada
untuk membangun kembali target, hanya karena file input telah berubah. Ini adalah yang lain
fitur penting untuk menjamin build yang benar yang diambil dari utilitas "kontra".

Perhitungan tanda tangan pintar
Beberapa modifikasi pada file sumber sebenarnya tidak memerlukan pembangunan kembali. Misalnya, jika
Anda hanya mengubah baris komentar, atau jika Anda mengubah beberapa kode, tidak ada yang khusus
alasan untuk memaksa kompilasi. Untuk kompilasi C/C++, makepp menentukan apakah a
file membutuhkan kompilasi ulang dengan menghitung checksum kriptografi dari konten file,
mengabaikan komentar dan spasi, alih-alih melihat waktu file.

Ini sangat berguna jika Anda telah menyertakan file yang dihasilkan oleh file yang
berubah, namun file include yang dihasilkan sendiri jarang berubah. Misalkan kamu
memiliki tata bahasa yacc yang rumit di program Anda, dengan aturan build seperti ini:

y.tab.c y.tab.h: parser.y
yacc -d parser.y

Biasanya, setiap kali Anda membuat perubahan kecil pada "parser.y", setiap file yang
tergantung pada "y.tab.h" harus dibangun kembali karena waktu file "y.tab.h" telah berubah.
Namun, sebagian besar perubahan pada "parser.y" tidak akan benar-benar mengubah konten "y.tab.h"
(kecuali mungkin komentar), jadi semua kompilasi ulang itu tidak perlu.

Repositori
Makepp dapat secara otomatis menggabungkan file dari pohon direktori yang berbeda (the
"repositori") ke dalam pohon build saat ini sesuai kebutuhan. (Ide ini juga diambil dari
program "kontra".) Ini memiliki beberapa kegunaan menarik:

Varian build
Misalkan Anda telah mengkompilasi program Anda dengan optimasi dan debugging
mati. Sekarang bug muncul dan Anda harus mengkompilasi ulang semuanya dengan debugging
diaktifkan. Namun, setelah Anda menemukan bug, Anda akan mematikan debugging dan
pengoptimalan kembali, dan dengan sebagian besar program, Anda harus mengkompilasi ulang semua
sumber lagi, bahkan yang tidak berubah. Prosedurnya akan terlihat
seperti ini:

% makepp CFLAGS=-O2 # Kompilasi semuanya.
# ups, bug ditemukan di sini
% makepp CFLAGS=-g # Mengkompilasi ulang semuanya lagi.
gdb program_saya
# ... temukan bugnya
% makepp CFLAGS=-O2 # Mengkompilasi ulang semuanya untuk ketiga kalinya.

Dengan makepp, Anda cukup melakukan cd ke direktori kosong, dan menentukan yang asli
direktori sebagai tempat penyimpanan. Ini akan membuat file objek baru di tempat yang kosong
direktori, sambil membiarkan file objek lama Anda tetap utuh. Sekarang Anda dapat menemukan bug
di direktori yang dikompilasi dengan debug, perbaiki di sumber asli Anda, lalu buka
kembali ke direktori asli Anda. Sekarang hanya beberapa file yang Anda ubah sebenarnya
perlu dikompilasi ulang.

Seluruh prosedur akan terlihat seperti ini:

% makepp CFLAGS=-O2 # Kompilasi semuanya.
# ups, bug ditemukan di sini
% mkdir debug
% cd debug
% makepp -R .. CFLAGS=-g # Kompilasi dengan debugging diaktifkan, tapi
# letakkan objek di subdir debug.
% gdb program_saya
# ... temukan bugnya
% cd.. # Kembali ke direktori asal.
% makepp CFLAGS=-O2 # Hanya mengkompilasi ulang file-file itu
# yang Anda ubah.

Ini bisa menjadi penghematan waktu yang luar biasa jika ada banyak modul.

Tim pengembangan dengan sumber yang sama
Misalkan Anda memiliki tim pengembang yang mengerjakan serangkaian sumber standar. Setiap
pengembang membuat perubahan independen, tetapi tidak perlu memiliki salinan
seluruh pohon sumber. Menggunakan repositori makepp, Anda dapat memiliki setiap pengembang
hanya menyalin file yang telah dia ubah. Makepp akan secara otomatis dan
buat sementara tautan simbolis untuk file lain yang belum diubah
ke file yang sesuai di repositori. Ia bahkan dapat melakukan ini untuk objek
file yang ada di repositori dan tidak perlu dikompilasi ulang di
direktori individu pengembang.

Menjamin aturan yang benar
Jika aturan Anda melakukan sesuatu yang tidak Anda beri tahu makepp, repositori
mekanisme tidak akan tahu untuk mengambil hal-hal itu. Jadi sesuatu yang dibangun secara normal
tetapi gagal dari repositori memberi tahu Anda untuk memperbaiki aturan Anda.

Inferensi otomatis dari file ".o" yang dibutuhkan
Makepp sering dapat menyimpulkan dengan tepat objek mana yang benar-benar diperlukan tanpa menjadi
secara eksplisit diceritakan. Jika Anda menggunakan fitur ini, maka jika salah satu file sumber Anda menyertakan
"xx.h", dan ada file bernama "xx.o" yang makepp tahu cara membuatnya, lalu makepp
menambahkan "xx.o" ke baris perintah tautan. Saya tidak menggunakan perpustakaan non-bersama sekarang di banyak
tempat di mana saya dulu, karena makepp dapat secara otomatis memilih modul yang saya butuhkan.

Penanganan alias yang benar untuk direktori
Makepp tidak akan bingung dengan tautan lunak ke direktori atau dengan kerabat yang berbeda
nama file yang merujuk ke file yang sama. Semua jalur direktori ke file dikenali,
termasuk foo, ./foo, ../src/foo, /auto_mnt/somedisk/bob/src/foo, dan
/pengguna/bob/src/foo.

Nama file dengan karakter khusus
Makepp dapat mendukung nama file dengan titik dua atau spasi atau karakter khusus lainnya yang
menyebabkan masalah untuk membuat tradisional. Cukup kelilingi nama file dengan tanda kutip. (Lihat
"Karakter khusus" di makepp_rules untuk detailnya.)

Fungsi substitusi tekstual yang dapat diperluas
Makepp dapat menggunakan subrutin Perl sewenang-wenang untuk substitusi tekstual di makefile.
Jika Anda tahu Perl, Anda tidak dibatasi sama sekali oleh set bawaan makepp
fungsi manipulasi tekstual.

Anda juga dapat menulis kode Perl di makefile Anda. Anda dapat memanipulasi Make
variabel dengan kekuatan penuh dari seluruh bahasa Perl. Lihat makepp_variables untuk
rincian.

Pencatatan keputusan pembangunan
Secara default, makepp membuat file log dapat dilihat dengan makepplog, mppl yang berisi
deskripsi setiap file yang coba dibuat, aturan apa yang digunakan untuk membuatnya, apa
itu tergantung pada, dan (jika file itu dibangun kembali) mengapa. Ini bisa sangat berguna untuk
men-debug makefile--jika Anda bertanya-tanya mengapa makepp memutuskan untuk membangun kembali file, atau mengapa
tidak, Anda bisa melihat di file log di mana itu menjelaskan keputusan.

Dukungan yang ditingkatkan untuk build paralel
Makepp mendukung kompilasi paralel, tetapi (tidak seperti implementasi make lainnya) itu
tidak akan mencampur output dari proses terpisah yang berjalan secara bersamaan.

Sinonim untuk variabel samar
Makepp mendukung sinonim yang lebih mudah diingat untuk variabel make samar $@, $^, dan
$<. Lihat makepp_variables untuk detailnya.

Gunakan makepp online menggunakan layanan onworks.net


Server & Workstation Gratis

Unduh aplikasi Windows & Linux

Perintah Linux

Ad