Forum: Ders Arası RSS
Windows make dosyaları
erdem (Moderatör) #1
Üye Tem 2009 tarihinden beri · 978 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: Windows make dosyaları
Windows için make dosyası nasıl oluşturulur bilen var mı acaba.

http://www.digitalmars.com/ctg/make.html

Ben Digitalmars'ın make aracını inceledim ama nasıl kullanılacağını anlayamadım. Derlerken make -f win32.mak şeklinde derleniyor sanırım ama içeriği nasıl olacak anlayamadım.

Bir de komut satırında linux altında

$ dmd dosya.d baskadosya.d -I/modul/ekleme/dizini  -L-L/kutuphane/dizini -L-lkutuphane

şeklinde kullandığımız yazım biçiminin windows karşılığını bilen var mı acaba..
canalpay (Moderatör) #2
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Windowsta basit make komutları çalışıyor diye biliyorum. Örn şu kodlar çalışıyor:
 
dkv: belge derle
 
.PHONY: derle
derle:
        dmd denemeG.d dkvG.d bilgi.d dkvB.d
        ./denemeG
.PHONY: belge
belge:
        dmd denemeG.d dkvG.d belge.ddoc bilgi.d dkvB.d -D -Ddhtml
 
 
.PHONY: sil
sil:
        rm html -rf
        rm denemeG -rf
        rm denemeG.o -rf
        rm deneme -rf
        rm dkvözel -rf

.bat dosyasıda hazırlanabilir. Örneğin örnek.bat dosyasının içine şu yazılır:
@ dmd dosya.d baskadosya.d -I/modul/ekleme/dizini  -L-L/kutuphane/dizini -L-lkutuphane %*
erdem (Moderatör) #3
Üye Tem 2009 tarihinden beri · 978 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Teşekkürler! :)

Bu arada windows'un komut istemine yazdığım komutların yarısı boşa gidiyor  :-p Sonunda nano birsey.txt en sonunda dank edince de notepad ile durumu kurtarmaya çalışıyorum.

Ayrıca Digital Mars koskoca derleyici yazıyor. Yazdıkları açıklama bir kaç satır. Ne bir örnek ne bir şey. Bir de GNU Make'i düşünün ne kadar döküman var. Her zaman Digital Mars'ta bulamadığım şeyleri bulduğum stackoverflow da bu sefer çare olmadı.

En sonunda D'nin kendi kaynak koduna baktım. Burada Phobos kütüphanesinde Andrei'nin yazdığı win32.mak örneği oldukça anlaşılırdı.

CP=cp

## Directory where dmd has been installed

DIR=\dmd2

## Flags for dmc C compiler

CFLAGS=-mn -6 -r
#CFLAGS=-g -mn -6 -r

## Flags for dmd D compiler

DFLAGS=-O -release -nofloat -w -d

DMD=$(DIR)\bin\dmd

DMD=dmd

.d.obj:
$(DMD) -c $(DFLAGS) $

test : test.exe

test.obj : test.d
$(DMD) -c test -g -unittest

test.exe : test.obj phobos.lib
$(DMD) test.obj -g -L/map

SRCS_1 = std\stdio.d std\stdiobase.d \


Ama bunu da bir araya getiremedim.
acehreli (Moderatör) #4
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Sonuçta oldu mu olmadı mı?

Şurayı görmüşsündür:

  http://www.digitalmars.com/d/2.0/dmd-windows.html

dmd'nin bağlamayı nasıl yapacağı veya yapmayacağı "Linking" başlığında anlatılıyor.

Ali
erdem (Moderatör) #5
Üye Tem 2009 tarihinden beri · 978 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Olmadı.

Aslında derleyiciye geçilen -I -L-L -L-l seçenekleri windowsta farklı mı anlayamadım.

Oraya bakmıştım. Hatta derleyicinin lib dosyalarının olduğu klasöre kopyaladım. Ama bu derleyiciye geçilen bağlayıcı parametreleri windowsta farklı mı emin olamadım. Örneğin:

dmd -L-L/C:\lib

gibi bir şey giriyorum. Derleyici C diye bir parametre almaz gibi bir hata veriyor.
acehreli (Moderatör) #6
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Windows programlarında bölü işareti program parametresidir ya... Acaba bölü olmayacak mı?

Ali
erdem (Moderatör) #7
Üye Tem 2009 tarihinden beri · 978 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Hala Natty üzerindeyim. Yarın biraz daha deneyeyim bakalım :)

Bir de sc.ini dosyaları varmış. Onlara da bakarım artık.
erdem (Moderatör) #8
Üye Tem 2009 tarihinden beri · 978 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
import std.stdio;
import sdl;
 
void main()
{
    SDL_Init(SDL_INIT_EVERYTHING);
}

Şimdi şu basit SDL programını derlemeye çalışıyorum.

dmd -c test.d sdl.d

Buraya kadar her şey normal. Şimdi bağlamaya çalışıyorum.

link test.obj sdl.obj VC\SDL.lib VC\SDLmain.lib

Bu hatayı veriyor.

OPTLINK (R) for Win32  Release 8.00.8
Copyright (C) Digital Mars 1989-2010  All rights reserved.
http://www.digitalmars.com/ctg/optlink.html
VC\SDL.lib Offset 00000H Record Type 0021
 Error 138: Module or Dictionary corrupt

Hata mesajından gene problemin object ya da kütüphane dosyalarının formatından kaynaklandığını düşünüyorum.

http://www.digitalmars.com/ctg/coff2omf.html

coff2omf diye bir araç derleyici ile gelmiyor şimdi para verip gidip Digital Mars'ın C++ derleyicisini de mi satın almam gerekiyor. Microsoft derleyici araçlarını bedava dağıtırken sırf ben Digital Mars'a olan hayranlığımdan gidip onların C++ derleyici ve bağlayıcı araçlarını mı satın alayım :(

Ya da SDL'i kaynak kodundan Digital Mars C++ derleyicisiyle derlemek belki çözüm olabilir diye düşünüyorum.

Daha sonra gene daha önce konuştuğumuz objconv programını kullanarak lib dosyalarının formatını OMF formatına çevirmeyi düşünüyorum. Burada çevirmeye çalıştığım VC6 ile oluşturulmuş kütüphane dosyalarıydı.

objconv.exe -fomf -nu SDLmain.lib SDLmain2.lib

Input library: SDLmain.lib, Format: COFF, Output: SDLmain2.lib, Format: OMF

  6 Debug sections removed
  1 Exception sections removed

Bunu başarılı bir şekilde tamamladı.

objconv.exe -fomf -nu SDL.lib SDL2.lib

Error 2507: SDL.lib is an import library. Can not convert to static library

Anladığım kadarıyla burada işlevlerin tanımları var:

objconv.exe -d SDL.lib

http://paste.pocoo.org/show/392112/

link test.obj sdl.obj VC\SDLmain2.lib

Dediğimde de bu hatayı veriyor.

OPTLINK (R) for Win32  Release 8.00.8
Copyright (C) Digital Mars 1989-2010  All rights reserved.
http://www.digitalmars.com/ctg/optlink.html
VC\SDLmain2.lib(SDL_win32_m)
 Error 42: Symbol Undefined _SDL_main
VC\SDLmain2.lib(SDL_win32_m)
 Error 42: Symbol Undefined _SDL_SetModuleHandle
VC\SDLmain2.lib(SDL_win32_m)
 Error 42: Symbol Undefined _SDL_GetError
VC\SDLmain2.lib(SDL_win32_m)
 Error 42: Symbol Undefined _SDL_Init
VC\SDLmain2.lib(SDL_win32_m)
 Error 42: Symbol Undefined _SDL_strlcpy
VC\SDLmain2.lib(SDL_win32_m)
 Error 42: Symbol Undefined _SDL_Quit
VC\SDLmain2.lib(SDL_win32_m)
 Error 42: Symbol Undefined ___mb_cur_max

Hatta yeşillik olsun diye assembly koduna bile çevirdim.

objconv.exe -fyasm SDL.dll SDL.asm

Şöyle bir şeyler oluştu :)
; Filling space: 0AH
; Filler type: lea with same source and destination
;       db 8DH, 76H, 00H, 8DH, 0BCH, 27H, 00H, 00H
;       db 00H, 00H
 
ALIGN   16
 
SDL_Init:
        push    ebp                                     ; 681012C0 _ 55
        mov     ebp, esp                                ; 681012C1 _ 89. E5
        push    ebx                                     ; 681012C3 _ 53
        sub     esp, 4                                  ; 681012C4 _ 83. EC, 04
        mov     ebx, dword [ebp+8H]                     ; 681012C7 _ 8B. 5D, 08
        call    SDL_ClearError                          ; 681012CA _ E8, 00000441
        mov     dword [esp], ebx                        ; 681012CF _ 89. 1C 24
        call    SDL_InitSubSystem                       ; 681012D2 _ E8, FFFFFE79
        test    eax, eax                                ; 681012D7 _ 85. C0
        mov     edx, 4294967295                         ; 681012D9 _ BA, FFFFFFFF
        js      ?_0029                                  ; 681012DE _ 78, 0A
        and     ebx, 100000H                            ; 681012E0 _ 81. E3, 00100000
        jz      ?_0030                                  ; 681012E6 _ 74, 08
?_0028: xor     edx, edx                                ; 681012E8 _ 31. D2
?_0029: pop     ecx                                     ; 681012EA _ 59
        mov     eax, edx                                ; 681012EB _ 89. D0
        pop     ebx                                     ; 681012ED _ 5B
        pop     ebp                                     ; 681012EE _ 5D
        ret                                             ; 681012EF _ C3
 
?_0030: call    ?_0080                                  ; 681012F0 _ E8, 000004CB
        jmp     ?_0028                                  ; 681012F5 _ EB, F1
erdem (Moderatör) #9
Üye Tem 2009 tarihinden beri · 978 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Sonunda Borland'ın ücretsiz C++ derleyicisinin yanında gelen coff2omf programını kullanarak SDL.lib dosyasını uygun formata çevirebildim  :-)

dmd -c test.d sdl.d

link test.obj sdl.obj VC\SDL2.lib


şeklinde de derledim ve çalıştı. Yalnız oldukça uğraştırıcı oldu  :huh:

Ayrıca böyle araçları Digital Mars'ın parayla satmak istemesini anlamak mümkün değil.

http://www.digitalmars.com/ctg/coff2omf.html

Basic utilities isminde bazı araçları veriyorlar ama onun da zip dosyası bozuk.

http://ftp.digitalmars.com/bup.zip
erdem (Moderatör) #10
Üye Tem 2009 tarihinden beri · 978 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Digital Mars'ın make aracı için sonunda make dosyası yapabildim :)

Belki birilerinin işine yarayabilir diye buraya yazıyorum.

DMD=dmd
KUTUPHANE=\
    lib\SDL.lib \

TEST=\
    test.d \
    sdl.d \
   
test.exe: $(TEST)
    $(DMD) $** $(KUTUPHANE)
   
#all: test.exe

Derlemek için make -f win32.mak yazmanız yeterli.
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Forum: Ders Arası RSS
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-11-18, 17:25:54 (UTC -08:00)