انجمن‌های فارسی اوبونتو

کمک و پشتیبانی => انجمن عمومی => نویسنده: abdossamad2003 در 15 مهر 1395، 03:58 ب‌ظ

عنوان: Makefile
ارسال شده توسط: 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
ارسال شده توسط: دانیال بهزادی در 16 مهر 1395، 01:04 ق‌ظ
پروندهٔ makefile به دستور make می‌گه که باید رد چه شرایطی، چه کارهایی رو انجام بده. همین!
عنوان: پاسخ : Makefile
ارسال شده توسط: abdossamad2003 در 18 مهر 1395، 04:16 ب‌ظ
با تشکر
خود دستور make یک دستور درونی در لینوکس محسوب می شود یا دستور خارجی است؟
عنوان: پاسخ : Makefile
ارسال شده توسط: دانیال بهزادی در 18 مهر 1395، 05:04 ب‌ظ
لینوکس که دستوری نداره اصلاً! make نام پروندهٔ اجرایی نرم‌افزار GNU make است: https://www.gnu.org/software/make
این نرم‌افزار، جزء استانداردی از سیستم‌عامل گنوست.
عنوان: پاسخ : Makefile
ارسال شده توسط: Borderliner در 23 مهر 1395، 02:46 ب‌ظ
برنامه 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 هم برنامه رو به ترتیب نصب و حذف میکنن از سیستم. امیدوارم به دردتون بخوره این اطلاعات.