انجمنهای فارسی اوبونتو
کمک و پشتیبانی => انجمن عمومی => نویسنده: abdossamad2003 در 15 مهر 1395، 03:58 بظ
-
با سلام خدمت دوستان
سوال من اینه که makefile فایل چه عملی انجام می دهد?
مثلاْ محتوای یک makefile به صورت زیر است:
#
# --- HYCOM 2.2 makefile
#
# --- Stand-alone HYCOM, or HYCOM ESMF component, or HYCOM+CICE.
#
# --- Tunable parameters in ../config/$(ARCH)_$(TYPE)
#
.SUFFIXES:
.SUFFIXES: .c .F .f .o
.F:
@echo "Must have an explicit rule for" $*
.f:
@echo "Must have an explicit rule for" $*
.c:
@echo "Must have an explicit rule for" $*
include ../config/$(ARCH)_$(TYPE)
MODS = mod_dimensions.o mod_xc.o mod_za.o mod_pipe.o mod_incupd.o mod_floats.o mod_tides.o mod_mean.o mod_hycom.o
OBJS = archiv.o barotp.o bigrid.o blkdat.o cnuity.o convec.o \
diapfl.o dpthuv.o dpudpv.o forfun.o geopar.o hybgen.o \
icloan.o inicon.o inigiss.o inikpp.o inimy.o latbdy.o \
matinv.o momtum.o mxkprf.o mxkrt.o mxkrtm.o mxpwp.o \
overtn.o poflat.o prtmsk.o psmoo.o restart.o \
thermf.o trcupd.o tsadvc.o \
machine.o wtime.o machi_c.o isnan.o
hycom: $(MODS) $(OBJS) hycom.o
$(LD) $(LDFLAGS) -o hycom hycom.o $(MODS) $(OBJS) $(EXTRALIBS)
esmf: $(MODS) $(OBJS)
@echo "--- ESMF hycom component has been built ---"
hycom_cice: $(MODS) $(OBJS) mod_OICPL.o hycom_cice.o
$(LD) $(LDFLAGS) -o hycom_cice \
hycom_cice.o mod_OICPL.o \
$(MODS) $(OBJS) \
${CICE_DIR}/esmf/compile/*.o \
$(EXTRALIBS)
hycom.o: hycom.F mod_hycom.o
hycom_cice.o: hycom_cice.F mod_hycom.o mod_OICPL.o
archiv.o: archiv.f mod_xc.o common_blocks.h mod_za.o
barotp.o: barotp.f mod_xc.o common_blocks.h mod_pipe.o \
mod_tides.o
bigrid.o: bigrid.f mod_xc.o
blkdat.o: blkdat.F mod_xc.o common_blocks.h stmt_fns.h mod_incupd.o \
mod_floats.o \
mod_tides.o
cnuity.o: cnuity.f mod_xc.o common_blocks.h mod_pipe.o
convec.o: convec.f mod_xc.o common_blocks.h stmt_fns.h
diapfl.o: diapfl.f mod_xc.o common_blocks.h stmt_fns.h
dpthuv.o: dpthuv.f mod_xc.o common_blocks.h
dpudpv.o: dpudpv.f mod_xc.o
forfun.o: forfun.f mod_xc.o common_blocks.h mod_za.o
geopar.o: geopar.F mod_xc.o common_blocks.h stmt_fns.h mod_za.o
hybgen.o: hybgen.f mod_xc.o common_blocks.h stmt_fns.h mod_pipe.o
icloan.o: icloan.f mod_xc.o common_blocks.h stmt_fns.h
inicon.o: inicon.f mod_xc.o common_blocks.h stmt_fns.h mod_pipe.o
inigiss.o: inigiss.f mod_xc.o common_blocks.h stmt_fns.h
inikpp.o: inikpp.f mod_xc.o common_blocks.h stmt_fns.h
inimy.o: inimy.f mod_xc.o common_blocks.h stmt_fns.h
isnan.o: isnan.F
latbdy.o: latbdy.f mod_xc.o common_blocks.h mod_tides.o
machine.o: machine.F
machi_c.o: machi_c.c
matinv.o: matinv.f mod_xc.o common_blocks.h
momtum.o: momtum.f mod_xc.o common_blocks.h stmt_fns.h mod_pipe.o \
mod_tides.o
mxkprf.o: mxkprf.f mod_xc.o common_blocks.h stmt_fns.h mod_pipe.o
mxkrt.o: mxkrt.f mod_xc.o common_blocks.h stmt_fns.h
mxkrtm.o: mxkrtm.f mod_xc.o common_blocks.h stmt_fns.h
mxpwp.o: mxpwp.f mod_xc.o common_blocks.h stmt_fns.h
overtn.o: overtn.f mod_xc.o common_blocks.h
poflat.o: poflat.f
prtmsk.o: prtmsk.f
psmoo.o: psmoo.f mod_xc.o
restart.o: restart.f mod_xc.o common_blocks.h mod_za.o mod_tides.o
thermf.o: thermf.f mod_xc.o common_blocks.h stmt_fns.h
trcupd.o: trcupd.f mod_xc.o common_blocks.h mod_pipe.o
tsadvc.o: tsadvc.f mod_xc.o common_blocks.h stmt_fns.h mod_pipe.o
wtime.o: wtime.F
mod_hycom.o: \
mod_hycom.F mod_xc.o common_blocks.h mod_za.o mod_pipe.o \
mod_incupd.o \
mod_mean.o \
mod_floats.o
mod_incupd.o: \
mod_incupd.F mod_xc.o common_blocks.h mod_za.o
mod_floats.o: \
mod_floats.F mod_xc.o common_blocks.h mod_za.o mod_pipe.o
mod_pipe.o: \
mod_pipe.F mod_xc.o common_blocks.h
mod_tides.o: \
mod_tides.F mod_xc.o common_blocks.h mod_za.o
mod_mean.o: \
mod_mean.F mod_xc.o common_blocks.h mod_za.o
mod_dimensions.o: mod_dimensions.F dimensions.h
mod_xc.o: mod_xc.F mod_dimensions.o mod_xc_sm.h mod_xc_mp.h
mod_za.o: mod_za.F mod_xc.o mod_za_sm.h mod_za_mp.h mod_za_mp1.h mod_za_zt.h
mod_OICPL.o: mod_OICPL.F
توضیح مختصر دوستان برای من مفید خواهد بود
با تشکر
-
پروندهٔ makefile به دستور make میگه که باید رد چه شرایطی، چه کارهایی رو انجام بده. همین!
-
با تشکر
خود دستور make یک دستور درونی در لینوکس محسوب می شود یا دستور خارجی است؟
-
لینوکس که دستوری نداره اصلاً! make نام پروندهٔ اجرایی نرمافزار GNU make است: https://www.gnu.org/software/make
این نرمافزار، جزء استانداردی از سیستمعامل گنوست.
-
برنامه make برنامه اتوماسیون برای کامپایل کردن سورس کدهای زبانهای برنامه نویسی، به خصوص C و ++Cه. برای مثال برنامه زیر رو در نظر بگیرید:
#include <iostream>
int main(int argc, char **argv) {
std::cout<<"Hello World!"<<std::endl;
return 0;
}
برای کامپایل کردن چنین برنامه ای، از دستور زیر استفاده میشه:
g++ code.cpp -O2 -o App
برای پاک کردن فایل App ای که تولید شده، از دستور زیر استفاده میشه:
rm -f App
برای نصب برنامه App هم میشه همچین چیزی رو فرض کرد:
cp App /usr/local/bin
شما برای هربار کامپایل کردن، باید دستورات تکراری بالا رو اجرا کنید. اما با make، این دستورات براتون خلاصه میشن. یک فایل بسازید به اسم Makefile یا makefile، بعد کد زیر رو درونش ذخیره کنید، و در کنار فایل code.cpp قرارش بدین:
App:
g++ code.cpp -O2 -o App
clean:
rm -f App
install:
cp App /usr/local/bin
uninstall:
rm -f /usr/local/bin/App
حالا یک ترمینال باز کنید و دستور make
رو بزنید. میبینید که برنامه کامپایل شد. حالا اگه دستور make clean
رو بزنید، فایل کامپایل شده App پاک میشه. دستور make install
و make uninstall
هم برنامه رو به ترتیب نصب و حذف میکنن از سیستم. امیدوارم به دردتون بخوره این اطلاعات.