SORU
3 ŞUBAT 2009, Salı


Makefile fonksiyonları

Tekrarlanan bir sürü şey, örneğin bir Makefile yazıyorum

debug_ifort_Linux:
        if [ $(UNAME) = Linux ]; then                           \
          $(MAKE) FC=ifort FFLAGS=$(difort) PETSC_FFLAGS="..."  \
                  TARGET=$@ LEXT="ifort_$(UNAME)" -e syst;      \
        else                                                    \
          echo $(err_arch);                                     \
          exit 1;                                               \
        fi

burada hedef 'sis' tanımlanır, değişken 'UNAME' tanımlı (ve genellikle Linux, ama belki de özellik listesi veya OSF1) ve değişken difort' ve 'err_arch' da tanımlanmış. Bu kod bloğu farklı bir derleyici hedefler için pek çok kez kullanılır (adı Kongre kullanıyor ''). Bu gereksiz kod çok büyük bir miktar olduğundan, daha basit bir şekilde yazmak istiyorum. E. g., Böyle bir şey yapmak istiyorum:

debug_ifort_Linux:
        compile(uname,compiler,flags,petsc_flags,target,lext)

derleme bir işlev kodu yukarıdaki tartışmalarla yapıyor olabilir. Herkes bunu başarmak nasıl herhangi bir fikir var mı?

CEVAP
3 ŞUBAT 2009, Salı


call function arıyoruz.

compile =                                                 \
        if [ $(UNAME) = $(1) ]; then                      \
          $(MAKE) FC=$(2) FFLAGS=$(3) PETSC_FFLAGS="..."  \
                  TARGET=$@ LEXT="$(4)_$(UNAME)" -e syst; \
        else                                              \
          echo $(err_arch);                               \
          exit 1;                                         \
        fi

debug_ifort_Linux:
        $(call compile,Linux,ifort,$(difort),ifort)

Eğer varsa make sh's. yerine conditionals kullandığını görmek gerekir ama Makefilebiraz yeniden yapılandırılması, eğer

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • FlippinWindows | #1 Windows Tutorial Channel!

    FlippinWindo

    23 Mayıs 2010
  • PUSHER

    PUSHER

    11 HAZİRAN 2014
  • Stevie

    Stevie

    2 Mayıs 2010