Keil'de derleme öncesi özel programları çalıştırmak

Başlatan z, 19 Mayıs 2015, 07:03:51

z

Keilde derleme işlemini başlattığımda yazdığım bir exe program çalışıyor ve adı sanı sabit olan bazı dosyalar üzerinde ön işlem yapıyordu.

Yeni bir exe daha yazdım. Bunu da derleme aşamasında çalıştırmak istiyorum. Ancak bu program projede  include direktifi kullanılarak yazılmış ve ne kadar include edilmiş dosya varsa hepsi için tek tek çalışmalı.

Ancak bunu bir türlü  beceremedim.

Target for option da user segues altında run#1 run#2 gibi bölümler var. Buraya işletilmesini istediğimiz exe programın adını yazmamız yeterli.
Ancak her bir dosya için ne yapacağımı anlayamadım.


Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Tagli

Hocam yazdığın program proje klasöründeki kaynak dosyalarını tarayıp #include edilen kaynak dosyalarını bulabilir belki. Hedef dosyalar listesi bir kez belirlendikten sonra, yapması gereken işlemi hepsi üzerinde yapar.

Projeye #include ile eklenmiş dosyaların listesi bir ihtimalle Keil'in kendi proje dosyası içinde de saklanıyor olabilir. Çünkü genelde IDE'ler projeye ekli dosyaların bir listesini tutarlar.
Gökçe Tağlıoğlu

Gökhan BEKEN

Program çalaştığında, gider projenin path'indeki bütün dosyaları listeleyerek bir diziye path'lerini atar.
Dizideki bu dosya adreslerini sırayla açar,
varsa "include" geçen yerleri bulur,
include'nin yanındaki tırnakların arasında bulunan adreslerdeki dosyaları okur,
bu okuduğu adresteki dosyayı ekrana mı yazacak, ne yapacaksa işini görür ve mutlu son.

(Tagli benden hızlı davranmış)
Özel mesaj okumuyorum, lütfen göndermeyin.

z

Keil'in dosya sayısı kez programımı çalıştırmasını nasıl ayarlarıma takılıp alternatif çözümleri hiç düşünmemiştim.

Proje klasöründeki dosyalara tek tek baktığımda .d uzantılı olanın içinde tüm dosyaların yazılı olduğunu gördüm.

Bu durumda işim çok kolaylaştı.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Tagli

.d uzantili dosyalar derleyici tarafindan uretiliyor ve yanilmiyorsam bu dosyalarin olusabilmesi icin en az bir kez derlenmesi lazim projenin. Bu .d dosyalari make tarafindan kullaniliyor ve .c, .cpp gibi kaynak dosyalarinin header bagimliliklarini listeliyor. Eger kaynak dosyalarin header bagimlikliklari degisirse make bu durumu .d dosyalarina bakarak algiliyor ve ilgili kisimlari tekrardan derliyor. Bu dosyalar olmasaydi, mesela lib.c dosyasinin include ettigi lib.h degisirse make bunu algilayamaz ve lib.c'yi tekrardan derlemezdi.
Gökçe Tağlıoğlu

z

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Tagli

Zamanında elle Makefile yazmam gerekmişti ve epey araştırmıştım. Bu .d dosyaları ile o şekilde tanıştım.

Elbette özünde Make bir Unix yazılımı ama anladığım kadarıyla Unix haricinde de kullanılıyor ve hemen hemen tüm IDE'ler derleme işlemini bununla yapıyor. Elbette kullandıkları asıl yazılım GNU Make değil de bunun muadili olan bir program olabilir ama mantık aynı. Make sayesinde pek çok dosyadan oluşan bir proje derlenirken, sadece bir önceki derlemeden sonra değişmiş olan kaynak dosyaları tekrardan derlenerek zamandan tasarruf ediliyor.

Header bağımlılıklarının Makefile'da gösterilmesi ile ilgili bir doküman: http://scottmcpeak.com/autodepend/autodepend.html
Elbette burada yazdığı kadar ayrıntısına gitmemiştim işin. Bağlantısını verdiğim yazıda "An Improvement" yazan kısma ve ötesine gitmedim.

IDE'ler gerekli Makefile'ları kendileri otomatik oluşturduğu için genelde pek elle yazılmıyorlar. Ayrıca, Unix ortamı için farklı durumlarda farklı Makefile'lar oluşturmaktan ve bütün bu işi GNU standartlarına da uyarak yapmanın zorluğundan bıkan birileri 1990'lı yılların başlarında Automake isimli otomatik Makefile üreten bir yazılım geliştirmiş. Automake bu konudaki tek yazılım değil elbette.
Gökçe Tağlıoğlu

Burak B

#7
Normalde bunları makefile dosyasını işleyerek yapabilirdiniz ancak malesef keil makefile üretmiyor. Ancak batch file üretiyor. Onunla kendinize bir çözüm üretebilirseniz proje ayarlarından "Output" sekmesine bir bakın. Yada kendiniz bir makefile yazacaksınız. Bu konu yazılan modüllerin sürüm kontrollerinin otomatikleştirilmesi için elzem konulardan biridir.
"... a healthy dose of paranoia leads to better systems." Jack Ganssle

Farukc

Makefile kullanacaksanız Keil ile kullanamazsınız.  Derleyiciyide değiştirmenizi tavsiye ederim. GNU derleyicisi kullanırsanız dökümanlara daha rahat ulaşabilirsiniz.

Gökhan BEKEN

Proje dosyasında da kullanılan dosyalar yazıyor.

Mesela:

            <VariousControls>
              <MiscControls>--C99</MiscControls>
              <Define>USE_HAL_DRIVER,STM32F429xx,USE_STDPERIPH_DRIVER,STM32F429_439xx,USE_STM324x9I_EVAL</Define>
              <Undefine></Undefine>
              <IncludePath>..\Inc;..\Drivers\STM32F4xx_HAL_Driver\Inc;..\Drivers\STM32F4xx_HAL_Driver\Inc\Legacy;..\Middlewares\ST\STM32_USB_Host_Library\Core\Inc;..\Middlewares\ST\STM32_USB_Host_Library\Class\AUDIO\Inc;..\Drivers\CMSIS\Include;..\Drivers\CMSIS\Device\ST\STM32F4xx\Include;..\Libraries\CMSIS\Device\ST\STM32F4xx\Include;..\Libraries\STM32F4xx_StdPeriph_Driver\inc;..\Utilities\STM32_EVAL\Common;..\Utilities\STM32_EVAL\STM324x9I_EVAL;..\Libraries\CMSIS\Include;..\Src</IncludePath>
            </VariousControls>


Mesela:

        <Group>
          <GroupName>Middlewares/USB_Host_Library</GroupName>
          <Files>
            <File>
              <FileName>usbh_pipes.c</FileName>
              <FileType>1</FileType>
              <FilePath>..\Middlewares\ST\STM32_USB_Host_Library\Core\Src\usbh_pipes.c</FilePath>
            </File>
            <File>
              <FileName>usbh_core.c</FileName>
              <FileType>1</FileType>
              <FilePath>..\Middlewares\ST\STM32_USB_Host_Library\Core\Src\usbh_core.c</FilePath>
            </File>
            <File>
              <FileName>usbh_audio.c</FileName>
              <FileType>1</FileType>
              <FilePath>..\Middlewares\ST\STM32_USB_Host_Library\Class\AUDIO\Src\usbh_audio.c</FilePath>
            </File>
            <File>
              <FileName>usbh_ioreq.c</FileName>
              <FileType>1</FileType>
              <FilePath>..\Middlewares\ST\STM32_USB_Host_Library\Core\Src\usbh_ioreq.c</FilePath>
            </File>
            <File>
              <FileName>usbh_ctlreq.c</FileName>
              <FileType>1</FileType>
              <FilePath>..\Middlewares\ST\STM32_USB_Host_Library\Core\Src\usbh_ctlreq.c</FilePath>
            </File>
          </Files>
        </Group>
Özel mesaj okumuyorum, lütfen göndermeyin.

Farukc

Uğraşırsanız proje dosyasını makefile çeviren bir program yazabilirsiniz. Zaten proje dosyası xml türünde.