Rumah  >  Artikel  >  Operasi dan penyelenggaraan  >  Cara menggunakan arahan make di bawah linux

Cara menggunakan arahan make di bawah linux

WBOY
WBOYke hadapan
2023-05-15 12:37:124532semak imbas

Cara membuat kerja
Bagi mereka yang tidak mengetahui mekanisme di sebaliknya, arahan make menerima sasaran sama seperti argumen baris arahan. Sasaran ini biasanya disimpan dalam fail khas bernama "makefiles", dan fail tersebut juga mengandungi operasi yang sepadan dengan sasaran. Untuk mendapatkan maklumat lanjut, baca siri artikel ini tentang cara makefiles berfungsi.

Apabila arahan make dilaksanakan buat kali pertama, ia mengimbas fail make untuk mencari sasaran dan kebergantungannya. Jika kebergantungan ini adalah sasaran sendiri, teruskan mengimbas fail make untuk kebergantungan ini untuk mewujudkan kebergantungan mereka, dan kemudian menyusunnya. Sebaik sahaja kebergantungan utama disusun, maka sasaran utama disusun (yang dihantar melalui arahan buat).

Sekarang, dengan mengandaikan anda telah mengubah suai fail sumber tertentu dan anda melaksanakan perintah make sekali lagi, ia hanya akan menyusun fail sasaran yang berkaitan dengan fail sumber Oleh itu, menyusun fail boleh laku akhir menjimatkan banyak wang. masa.

buat contoh arahan
Berikut ialah persekitaran ujian yang digunakan dalam artikel ini:

os —— ubunut 13.04
shell —— bash 4.2.45
application —— gnu make 3.81

Berikut ialah kandungan projek:

rreee

Berikut ialah Kandungan makefile:

$ ls 
anothertest.c makefile test.c test.h

Sekarang mari kita lihat beberapa contoh aplikasi arahan buat di bawah linux:

1 Contoh mudah

Untuk menyusun keseluruhan projek, anda boleh menggunakan buat atau ikut arahan buat dengan sasaran semua.

all: test 

test: test.o anothertest.o 
  gcc -wall test.o anothertest.o -o test

test.o: test.c 
  gcc -c -wall test.c 

anothertest.o: anothertest.c 
  gcc -c -wall anothertest.c 

clean: 
  rm -rf *.o test

Anda boleh melihat kebergantungan yang dibuat buat kali pertama oleh arahan make dan sasaran sebenar.

Jika anda menyemak kandungan direktori sekali lagi, terdapat beberapa lagi fail .o dan fail boleh laku di dalamnya:

$ make 
gcc -c -wall test.c 
gcc -c -wall anothertest.c 
gcc -wall test.o anothertest.o -o test

Sekarang, andaikan anda telah membuat beberapa pengubahsuaian pada fail test.c, gunakan buat untuk menyusun projek sekali lagi :

$ ls 
anothertest.c anothertest.o makefile test test.c test.h test.o

Anda dapat melihat bahawa hanya test.o dikompilasi semula, tetapi test.o yang lain tidak dikompilasi semula.

Kini untuk membersihkan semua fail objek dan ujian fail boleh laku, anda boleh menggunakan bersih sasaran:

$ make 
gcc -c -wall test.c 
gcc -wall test.o anothertest.o -o test

Anda boleh melihat bahawa semua fail .o dan ujian fail boleh laku telah dipadamkan .

2 Jadikan semua sasaran sentiasa dibina semula dengan pilihan -b

Sekarang, anda mungkin perasan bahawa arahan buat tidak menyusun sasaran tersebut sejak binaan terakhir. Tiada fail yang diubah, tetapi jika anda ingin mengatasi tingkah laku lalai make, anda boleh menggunakan pilihan -b.

Berikut ialah contoh:

$ make clean
rm -rf *.o test

$ ls
anothertest.c makefile test.c test.h

Anda boleh melihat bahawa walaupun arahan make tidak akan menyusun sebarang fail, make -b akan memaksa penyusunan semua fail objek dan fail boleh laku terakhir.

3. Gunakan pilihan -d untuk mencetak maklumat penyahpepijatan

Jika anda ingin tahu perkara yang dibuat sebenarnya apabila ia dilaksanakan, gunakan pilihan -d.

Berikut ialah contoh:

$ make
make: nothing to be done for `all'.

$ make -b
gcc -c -wall test.c
gcc -c -wall anothertest.c
gcc -wall test.o anothertest.o -o test

Ini adalah output yang sangat panjang, anda juga melihat bahawa saya menggunakan lebih banyak arahan untuk memaparkan halaman keluaran demi halaman.

4 Gunakan pilihan -c untuk menukar direktori

Anda boleh menyediakan laluan direktori yang berbeza untuk arahan make, yang akan menukar direktori sebelum mencari fail makefile. .

Ini ialah direktori, dengan andaian anda berada dalam direktori semasa:

$ make -d | more
gnu make 3.81
copyright (c) 2006 free software foundation, inc.
this is free software; see the source for copying conditions.
there is no warranty; not even for merchantability or fitness for a
particular purpose.

this program built for x86_64-pc-linux-gnu
reading makefiles…
reading makefile `makefile'…
updating makefiles….
considering target file `makefile'.
looking for an implicit rule for `makefile'.
trying pattern rule with stem `makefile'.
trying implicit prerequisite `makefile.o'.
trying pattern rule with stem `makefile'.
trying implicit prerequisite `makefile.c'.
trying pattern rule with stem `makefile'.
trying implicit prerequisite `makefile.cc'.
trying pattern rule with stem `makefile'.
trying implicit prerequisite `makefile.c'.
trying pattern rule with stem `makefile'.
trying implicit prerequisite `makefile.cpp'.
trying pattern rule with stem `makefile'.
--more--

Tetapi fail makefile bagi arahan make yang anda mahu jalankan disimpan dalam direktori ../make-dir/ , anda boleh Lakukan ini:

$ ls 
file file2 frnd frnd1.cpp log1.txt log3.txt log5.txt
file1 file name with spaces frnd1 frnd.cpp log2.txt log4.txt

Anda boleh melihat bahawa arahan make mula-mula bertukar ke direktori tertentu, melaksanakannya di sana, dan kemudian bertukar kembali.

5 Gunakan pilihan -f untuk menganggap fail lain sebagai fail make

Jika anda ingin menamakan semula fail makefile, seperti my_makefile atau nama lain, kami Jika anda ingin membuat menganggapnya sebagai fail make, gunakan pilihan -f.

$ make -c ../make-dir/ 
make: entering directory `/home/himanshu/practice/make-dir' 
make: nothing to be done for `all'. 
make: leaving directory `/home/himanshu/practice/make-dir

Dengan cara ini, arahan make akan memilih untuk mengimbas my_makefile dan bukannya makefile.

Atas ialah kandungan terperinci Cara menggunakan arahan make di bawah linux. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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