Tuesday, April 29, 2008

Improving Quicklook : Make Quicklook Recognize Text Files without the Extension txt

qlmanage -p -c public.plain-text "$@" 2> /dev/null & I got this from here. Also, Folder.qlgenerator is noteworthy.

QLColorcode : Syntax Highlighting for Quicklook

Syntax highlighting for Quicklook : QLColorcode

Sunday, April 27, 2008

Switch Control and Alt buttons in Windows (for OS X users)

See http://alanhogan.com/tips/swap-left-alt-and-ctrl-keys-in-windows

Saturday, April 26, 2008

Two nifty mouse related Windows apps : Strokeit and Txmouse

I rarely use Windows these days, but when I do, there are some apps I can't do without. One of them is Strokeit, which allows the user to do mouse gestures for some commands. (which Opera users are lucky to have by default). So, just by moving the mouse at the NorthEast direction while holding the right key, you can perform "maximize" action, without going over to the title bar. Another nice app I discovered today is txmouse. For X11 like windows handling, I had previously tried Tweakui, however it had the annoying feature of auto-raising of the pointed window. Basically txmouse allows you to interact with non-focused windows without clicking inside them. Linux and Mac users already have this possibility (though in OS X, only scrolling is allowed -- point-to-focus is not allowed without 3rd party apps). It also brings the select to copy - middle click to paste functionality.

Friday, April 25, 2008

Speed up Make (Compilation) Process

make can make use of multiple cpu's. Simply use it as: make -j2 where 2 is the # of CPU's you have.

Modify iTunes link arrows' behavior

defaults write com.apple.iTunes invertStoreLinks -bool YES via : MacOSXHints

Narrow to Region / Code Folding in Emacs

You can hide/show certain parts of a document using: - narrow-to-region : C-x n n - narrow-to-page : C-x n p - show all : C-x n w To define a page, insert ^L characters to keypoint by " C-q C-l". See also: All-out mode

Skeletons for Emacs

(define-skeleton skeleton-c++-mode-cout
" Prints out a variable using cout " 
" Print variable : "
"\ncout << \" " str "\" << " str " << endl;\n" )

(global-set-key [?\C-p] 'skeleton-c++-mode-cout)
This code snippet will automatically create a cout line for a variable.

Sample Doxygen File

Doxygen is nice for creating documentation from source files. Here is a sample Doxyfile: Usage: 1. Document a file

/**
  \file
  \brief File description */
2. Document a function

/**
  \param msg Message to be encoded
  \param G Generator matrix for the (n,k) non-extended Hamming encoder
  \return Encoded matrix
  \author Ustun Ozgur
*/
3. Document a struct/class etc.

/**
  \struct Params_Chase
  \brief Structure holding all the Chase-II decoder variables
  \param alpha Extrinsic info weight
  \param beta Reliability multiplier for bits with no competing codeword available
  \param btc_iter Number of iterations
  \param s Unreliable bits
*/
4. Change the main page

/*! \mainpage Block Turbo Coder
   \section ...
*/

Turkish mode : turkish.el for emacs

http://www.denizyuret.com/turkish/turkish.el "This is for people trying to type Turkish documents on a U.S. keyboard." See http://denizyuret.blogspot.com/2006/11/emacs-turkish-mode.html For example, if you write Ustun, it will automatically convert that to Üstün.

Colloquy Bug : Hides Channel Output

Sometimes Colloquy makes the text on a channel invisible. Type "/reload style" to make content visible again.

Subversion for Source Code Revisions

I currently use subversion for source code revisions. Assembla is perfect for hosting your project. Some commands: svn up : Update to latest revision svn commit -m "Commit message" : Commit changes svn stat : See what has changed svn diff : See diff's (all files) svn diff a.c : See diff of a.c svn co : Checkout, initial command svn cat a.c --revision PREV or HEAD or 123 : get specific revisions of a.c For Windows, tortoisesvn is perfect. On OS X, I use commandline and svnX.

Disable Antialiasing in OS X

1. Per app setting: defaults write -app Opera AppleAntiAliasingThreshold 40 where 40 is your threshold. 2. Global setting defaults write -g AppleAntiAliasingThreshold 40 or use Tinkertool.

Cleansozluk

cleansozluk : "Bu script ek$i sozlukteki tüm reklamlari otomatik olarak kaldırır. Normal theme'e dönüşü otomatik olarak sağlar" Bazi buglari var, ama ise yariyor.

N800 Messages

Here are N800 related messages I posted on InternetTabletTalk forums : http://www.internettablettalk.com/forums/search.php?searchid=1735919

LaTeX Tips

1. Read http://tobi.oetiker.ch/lshort/lshort.pdf 2. Use TeXlive for Mac and MikTeX for Windows. 3. Use emacs auctex extension for editing. 4. Skim auto-reloads pdf's. 5. Read LaTeX as lah-tech as in technology, not as lah-teks.

OS X Apps I'm Using

See http://osx.iusethis.com/user/ustunozgur.

Opera Adblock

http://www.fanboy.co.nz/adblock/opera/

.inputrc


"\eo": "\C-p\C-a\ef "
"\e[A": history-search-backward
"\e[B": history-search-forward
set completion-ignore-case on
set show-all-if-ambiguous on
"\es": menu-complete

.bash_profile


alias ..='cd ..'
alias home='cd ~'
alias mat='cd ~/Documents/Matlab'
alias doc='cd ~/Documents/'
alias ping='ping -c 10'
alias ls='ls -G'
alias qlf='qlmanage -p'
export DISPLAY=localhost:0.0
shopt -s histappend
PROMPT_COMMAND='history -a'
shopt -s cdspell
test -r /sw/bin/init.sh && . /sw/bin/init.sh
if [ "$TERM" != 'dumb' ] && [ -n "$BASH" ] && [ -n "$PS1" ]
then
       if [ `/usr/bin/whoami` = 'root' ]
       then
               export PS1='[\[\033[01;31m\]\h \[\033[01;34m\]\W \$ \[\033[00m\]'
       else
               export PS1='\[\033[01;32m\]\u@\h \[\033[01;34m\]\W \$ \[\033[00m\]'
       fi
fi

alias matlab2='matlab -nodesktop -nosplash'
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/

export HISTCONTROL=ignoreboth

Bash tips

http://www.ukuug.org/events/linux2003/papers/bash_tips/

.emacs

I prefer Aquamacs. On Windows, I use Emacs W32. The following is for Aquamacs.

(setq mac-command-modifier 'meta)
(setq mac-option-modifier 'meta)


(setq inhibit-startup-message t)
(defun my-c-initialization-hook ()
 (define-key c-mode-base-map "\C-m" 'c-context-line-break)
 (add-hook 'c-initialization-hook 'my-c-initialization-hook)
)
(global-set-key [C-tab] 'next-buffer)
(global-set-key [C-S-tab] 'previous-buffer)
(global-set-key [S-tab] 'other-window)
(global-set-key [f2] 'save-buffer)
(global-set-key [f5] 'speedbar)
(global-set-key [f7] 'my-save-and-compile)
(global-set-key [f6] 'other-window)
(global-set-key [C-f6] 'comment-or-uncomment-region-or-line)
;(global-set-key [A-tab] 'other-window)
(global-set-key [M-f12] 'calendar)
(global-set-key [M-f9] 'kill-some-buffers)
(global-set-key [C-f4] 'kill-current-buffer)
;(global-set-key [?\A-h] 'mark-paragraph) sfsdfsdf 

(global-set-key [?\A- ] 'just-one-space)
(global-set-key [M-f1] 'man)
(global-set-key [?\A-n] 'new-frame)

(fset 'yes-or-no-p 'y-or-n-p)

;; Make control+pageup/down scroll the other buffer
(global-set-key [C-next] 'scroll-other-window)
(global-set-key [C-prior] 'scroll-other-window-down)
(global-set-key "\C-z" 'shell) ; or eshell
(global-set-key (kbd "M-a") 'execute-extended-command)

; return a backup file path of a give file path
; with full directory mirroring from a root dir
; non-existant dir will be created
(defun my-backup-file-name (fpath)
  "Return a new file path of a given file path.
If the new path's directories does not exist, create them."
  (let (backup-root bpath)
    (setq backup-root "~/.emacs.d/emacs-backup")
    (setq bpath (concat backup-root fpath "~"))
    (make-directory (file-name-directory bpath) bpath)
    bpath
  )
)
(setq make-backup-file-name-function 'my-backup-file-name)


(defun dotemacs ()
 "Open .emacs"
 (interactive)
 (find-file "~/Library/Preferences/Aquamacs Emacs/Preferences.el"))

(add-to-list 'load-path "~/elisp")
(setq-default abbrev-mode t)
(read-abbrev-file "~/.abbrev_defs")
(setq save-abbrevs t)

(setq require-final-newline 't)

;; Save the state of emacs
(desktop-save-mode 1)
(desktop-read)
(add-to-list 'desktop-globals-to-save 'file-name-history)



(defun kill-current-buffer ()
  "Kill the current buffer, without confirmation."
  (interactive)
  (kill-buffer (current-buffer)))


;; smarttab

;;;
;; Smart Tab

(defvar smart-tab-using-hippie-expand t
  "turn this on if you want to use hippie-expand completion.")

(global-set-key [(tab)] 'smart-tab)
(defun smart-tab (prefix)
  "Needs `transient-mark-mode' to be on. This smart tab is
minibuffer compliant: it acts as usual in the minibuffer.

In all other buffers: if PREFIX is \\[universal-argument], calls
`smart-indent'. Else if point is at the end of a symbol,
expands it. Else calls `smart-indent'."
  (interactive "P")
  (if (minibufferp)
      (minibuffer-complete)
    (if (smart-tab-must-expand prefix)
        (if smart-tab-using-hippie-expand
            (hippie-expand nil)
          (dabbrev-expand nil))
      (smart-indent))))

(defun smart-indent ()
  "Indents region if mark is active, or current line otherwise."
  (interactive)
  (if mark-active
      (indent-region (region-beginning)
                     (region-end))
    (indent-for-tab-command)))

(defun smart-tab-must-expand (&optional prefix)
  "If PREFIX is \\[universal-argument], answers no.
Otherwise, analyses point position and answers."
  (unless (or (consp prefix)
              mark-active)
    (looking-at "\\_>")))

;(load-library turkish.el)

(setq-default abbrev-mode t)

(read-abbrev-file "~/.abbrev_defs")

(setq save-abbrevs t)


;(setq initial-frame-alist '((top . 10) (left . 30)

 ;                           (width . 90) (height . 50)))

;(setq default-frame-alist '((width . 80) (height . 45)))

(setq speedbar-mode-hook '(lambda ()
    (interactive)
    (other-frame 0)))

(cd "/Users/ustun/Documents/")

(defun my-save-and-compile ()

(interactive "")

(save-buffer 0)

(compile compile-command)

)

VLC Derleme - Bölüm I : Hazırlık

Asagidaki bilgiler eski olabilir. Daha guncel bir makale surada. ===== Bu bölümde GNU/Linux üzerinde çalışacak bir VLC'yi derlemek için gereken hazırlıkları anlatacağım. Öncelikle VLC'nin kendi geliştiricileri de Debian GNU/Linux dağıtımını kullandığı için sizin de bu dağıtımı kullanmanız işleri oldukça kolaylaştıracaktır, hatta ortak çalışmamız için Debian kullanmanız zorunlu diyebilirim. Debian'da birçok paket (VLC'nin bağımlı olduğu bütün paketler) önceden derlenmiş olarak geldiği için bir de onları ve onların bağımlılıklarını derlemenize gerek kalmıyor. Debian'ın özel program kurulum sistemi de zaten bağımlılıkları otomatik olarak tanıyıp yüklüyor.

1. Depoları Ayarlama ve Program İndirmeyi Öğrenme

Temel Debian sistemimizi kurduktan sonra ilk yapmamız gereken kurulum dosyalarının depolarını sisteme tanıtmak. Bu işlemi zaten kurulum sırasında yapmış olabilirsiniz, yine de buradaki adımları takip etmeniz en azından indirme hızı açısından yararlı olacaktır; örneğin ben, Debian depolarından ortalama 1.5MB/s ile program indirebiliyorum.
  1. Root kullanıcı olarak bir metin düzenleyici ile /etc/apt/sources.list dosyasını açın. İçeriğini şu şekilde değiştirin: deb http://ftp.tr.debian.org/debian/ etch main contrib non-free
  2. Daha sonra, herhangi bir terminalde (konsolda), root kullanıcı olarak şu komutu çalıştırın: apt-get upgrade Bu şekilde depodaki bilgileri güncellemiş olduk.
  3. Artık rahatlıkla yeni programları ve kütüphaneleri indirebiliriz. Bunun için Debian'da iki seçenek bulunmakta: Grafik tabanlı olan Synaptic ya da konsol tabanlı apt-get. İlk başlarda Synaptic kullanmak daha mantıklı olacaktır, alıştıkça apt-get'i kullanmaya başlayabilirsiniz.
    1. Synaptic: Synaptic'te yapmamız gereken tek şey istediğimiz programa sağ tıklayıp "Mark for Installation"ı seçmek. Daha sonra onay kutularını takip edip uygula dediğimizde program kurulmuş oluyor.
    2. apt-get: apt-get kullanmak için komut satırında öncelikle root kullanıcı olmak gerekiyor.(su komutuyla --ya da sudo apt-get ... da kullanabilirsiniz. sudo geçici olarak root olmanıza yarayan bir komut. Bunu kullanmak için sudo programını kurup daha sonra da /etc/sudoers dosyanızın sonuna şuna benzer bir satır eklemeniz gerekiyor: ustun ALL=(ALL) ALL ) Kullanımı şu şekilde: apt-get install abc komutuyla abc programını yüklüyoruz. Aynı anda hem abc, hem de xyz programlarını kurmak istersek yazmamız gerekense apt-get install abc xyz. Benzer şekilde, bir programı kaldırmak için apt-get remove abc komutunu kullanabilirsiniz. Son olarak, bir programı derlemek için gereken tüm bağımlılıkları indirmek için apt-get build-dep abc komutu var.
      Not: Bu komutu aslında VLC'nin gereksinim duyduğu tüm programları indirmek için kullanabiliyor olmamız gerek; ancak son denememde hata vermişti.(apt-get build-dep vlc) Belki şu an çalışıyordur.

2. Bağımlılıkları İndirme

Bu kısımda VLC'yi derlemek için gerekli olan birkaç programı indireceğiz. Burada bilinmesi gereken kilit nokta şu: Bir programı derlemek için başka bir programa gereksinim duyuluyorsa bu genelde o programın geliştirme kütüphaneleridir. Mesela bizim programımız foo programına gereksinim duyuyor diyelim. Bu durumda Debian'da indirmemiz gereken genelde şu isimde bir paket olur: "libfoo-dev" Yani foo'nun geliştirme (dev) kütüphanesi (dev). Bazen de header paketlerine gereksinim duyulabilir. foo-headers şeklinde. Bazı paketlerdeyse baştaki lib bulunmamakta ve kütüphane foo-dev şeklinde depoda bulunmakta. Bu önemli noktayı bildikten sonra derleme işlemi oldukça kolaylaşıyor. Zira derlerken libhal bulunamadı gibi bir hatada yapmamız gereken Synaptic ya da apt-get kullanarak libhal veya libhal-dev gibi paketleri indirmek. Bu şekilde VLC'nin gereksinim duyduğu kütüphaneleri sırasıyla yüklüyoruz. Bu kütüphanelere VLC'nin wikisinden ulaşabilirsiniz. Debian'da paket yönetimiyle ilgili en güzel kısmı ise sona sakladım. apt-get'le sistemde kurulu paketlerin listesini alıp daha sonra tek bir komutla yeni veya farklı bir kuruluma aynı paketleri yükleyebiliyorsunuz. Örneğin benim sistemimde kurulu paketlerin listesini şuradan indirebilirsiniz. Daha sonra bu paketi kaydettiğiniz klasöre gidip şu komutu yazarsanız bende kurulu olan tüm paketler size de yüklenmiş oluyor: dpkg --set-selections <ustunsecim dselect install Böylece sizin sisteminiz de benim sistemim gibi VLC derlemeye hazır hale geliyor! :) Bir sonraki bölümde VLC derlemek için gereken komutları anlatacağım.

Debian Altında VLC Derleme

Ön Hazırlıklar

  1. Öncelikle depolarımızı source depolarını da içerek şekilde güncelliyoruz. Bunun için, /etc/apt/sources.list dosyasını şu ve benzeri şekilde değiştirin: deb http://ftp.tr.debian.org/debian/ testing main contrib non-free deb-src http://ftp.tr.debian.org/debian/ unstable main contrib non-free deb-src http://www.debian-multimedia.org sid main deb http://www.debian-multimedia.org lenny main Daha sonra apt-get update ve apt-get upgrade diyerek tüm güncellemeleri yapın.
  2. apt-get build-dep vlc diyerek derlemek için gerekli paketleri indiriyoruz. Bu şekilde gerekli çoğu paket indi.
  3. Şimdi kalan birkaç paketi indireceğiz. apt-get install subversion automake1.9 libtool cvs libgcrypt-dev libfaac-dev liblame-dev libfaad-dev libtwolame-dev libqt4-dev

Kaynak kodu indirme ve derleme

VLC'nin, X264'ün ve FFMPEG'in kodunu indiriyoruz. Önce X264 ve FFMPEG'i derleyip, daha sonra da VLC'yi derliyoruz.
% svn co svn://svn.videolan.org/vlc/trunk vlc
% cd vlc
% ./bootstrap
% cd extras/
% svn co svn://svn.videolan.org/x264/trunk x264
% cd x264
% make
% cd ..
% svn co svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg
% cd ffmpeg
% ./configure --enable-gpl --enable-pp \
               --enable-pthreads --enable-libmp3lame  \
               --enable-libfaac
% make
% cd ..

% cd ..
% mkdir build; cd build;
%../configure --prefix=/usr \
        --enable-snapshot --enable-debug \
        --enable-dbus-control --enable-musicbrainz \
        --enable-shared-libvlc --enable-mozilla \
        --enable-lirc \
        --with-ffmpeg-tree=../extras/ffmpeg \
        --enable-x264 --with-x264-tree=../extras/x264 \
        --enable-shout --enable-taglib \
        --enable-v4l --enable-cddax \
        --enable-dvb --enable-vcdx \
        --enable-realrtsp --enable-xvmc \
        --enable-svg   --enable-dvdread \
        --enable-dc1394 --enable-dv \
        --enable-theora --enable-faad \
        --enable-twolame --enable-real \
        --enable-flac --enable-tremor \
        --with-ffmpeg-mp3lame --with-ffmpeg-faac \
        --enable-skins2 --enable-qt4 \
        --enable-ncurses \
        --enable-aa --enable-caca \
        --enable-esd --disable-portaudio \
        --enable-jack --enable-xosd \
        --enable-galaktos --enable-goom \
        --enable-ggi \
        --disable-cddax --disable-vcdx \
       --disable-quicktime
% make

GNU/Linux'ta Program Derleme - I

Bu kısımda yeni başlayanlar için GNU/Linux üzerinde program derlemeyi ve kurmayı anlatacağım. Anlatacağım konular temel seviyede ve bu yazıda bütün kütüphanelerin sistemde kurulu ve tanıtılmış olduğunu varsayıyorum. (Tanıtılmamış olduğu durumları sonraki yazılarda inceleyebilirim.) Öncelikle, aslında küçük (iki üç dosyadan oluşan) programlarımızı gcc komutlarını konsolda kullanarak derleyebiliriz; ama program büyüdükçe hangi dosyanın hangisine bağlanacağı gibi kararlar karmaşıklaşır. Bu nedenle, automake gibi bu genel derleme işini otomatikleştiren araçlar kullanılmakta. Bu bölümde daha önceden automake kullanılmış programlara sahip olduğumuzu varsayıyoruz. (ki kullandığımız birçok programın kaynak kodları bu şekilde zaten) GNU/Linux'ta program derlemek üç ana adımdan oluşur:
  1. configure etme: configure komutları genelde sistemle ilgili veri almak için kullanılır. Bu komut sayesinde sistemde hangi program/kütüphanelerin nerede kurulu olduğu araştırılır ve programın hangi özelliklerini etkinleştirmek istediğimizi bu adımda belirtiriz. Bu adımdaki komutumuz şu şekilde: ./configure configure komutunun başındaki ./ karakterleri sistem PATH'inde bulunmayan herhangi bir çalışır dosyayı çalıştırmak için kullanılmakta. Yani, Windows altında olduğu gibi geçerli klasördeki çalışır dosyayı sadece adını vererek çalıştıramıyoruz; komutun önüne ./ eklememiz gerekiyor. (Not: Bir dosyayı çalışır hale getirmek için de chmod +x dosyaadi yapmamız gerekiyor.) Bunun dışında configure aşamasında programın seçeneklerini değiştirebileceğimizden bahsetmiştim. Mevcut seçenekleri çoğu durumda ./configure --help ile öğrenebiliyoruz. Daha sonra yapmamız gereken de ./configure --enable-abc --disable-foo şeklinde istediğimiz özellikleri ekleyip kaldırmak. Bu aşamada aynı zamanda bazı kütüphaneleri nereye kurduğumuzu da belirtiyoruz: ./configure --with-ffmpeg --with-ffmpeg-path=/usr/ffmpeg gibi. Tabii burada yazdığım parametreler sadece örnek, geçerli parametreleri daha önce belirttiğim gibi ./configure --help ile öğrenmeniz gerekiyor. configure komutunun sonucunda o klasör altında bir Makefile oluşturuluyor. Bu dosya bir sonraki adımda işe yarayacak.
  2. make: Bir sonraki aşama, asıl derleme aşamasının olduğu aşama. Genelde başkalarının yazdığı kodları çalıştırırken birinci aşamayı geçmeniz halinde make aşamasında fazla sorun yaşamıyorsunuz. Tabii kendi yazdığınız bir programsa bu aşamada hatalar çıkabilir.
  3. make install: Bu son aşamada aslında herhangi bir derleme yapmıyoruz. Bu adımın amacı derlediğimiz programı sistem klasörlerine kopyalamak; çünkü şu ana kadar yaptığımız bütün işlemler sonuçlarını içinde bulunduğumuz klasörde oluşturdu. Tabii ki sistem klasörlerine erişmemiz gerektiği için root kullanıcı olmamız gerekiyor. Bu komutu da make install deyip uyguladıktan sonra program her kullanıcı tarafından kullanılabilir duruma geliyor. Bu adımla ilgili belirtilmesi gereken diğer bir nokta aslında bu adımda 2. adımdaki make komutuna farklı bir parametre vermiş olduğumuz. Yani make komutu default halinde derlemeyi yapıyor; ama make install gibi bir komutla başka işlemler yapmasını sağlayabiliyorsunuz. Burada bir diğer örnek make clean olabilir. Bu da bütün derleme sonrası oluşturulmuş dosyaları silmenize ve sadece kaynak dosyalarının olduğu özgün duruma dönmenizi sağlıyor. Makefile dosyasını dikkatli incelerseniz bütün bu install, clean gibi komutların işlevlerinin yazılmış olduğunu göreceksiniz.
Son olarak aslında derleme işlemiyle direk ilgisi olmayan; ama işinize yarayabilecek birkaç ipucunu belirtmek istiyorum.
  1. .tar.gz uzantılı bir dosyayı açmak için gereken komut tar -zxf dosyaadi ve tar.bz2 içinse tar -jxf dosyaadi
  2. VLC gibi programlarda çok uzun configure komutları oluyor. Bunları her seferinde girmek yerine, DOS'taki batch dosyaları gibi script dosyaları oluşturabilirsiniz. Yapmanız gereken şunlar: Düz metin dosyasının ilk satırına #!/bin/sh yazın, sonraki satırlara da gireceğiniz komutları yazın. Eğer tek bir satırdan uzun olursa okunabilirliği artırmak adına \ kullanarak bir sonraki satırın bu satırını devamı olduğunu belirtin. Örneğin: ./configure --enable-a --enable-b --enable-c --enable-d --enable-e --enable-f --enable-g --enable-h --enable-i --enable-j --enable-k yerine ./configure --enable-a --enable-a \ --enable-b --enable-c --enable-d \ --enable-e --enable-f --enable-g gibi satırlar yazın. NOT: Her satırdaki son karakter \ olmak zorunda, yani \ karakterinden sonra boşluk bile gelmemeli.
  3. Bu komutları çalıştırdığınızda ekrana bir sürü yazı gönderecekler. Bunların bir kısmı normal çıktılar, diğerleri ise uyarı ve hatalar. Haliyle bu iki grubu birbirinden ayırdetmek güçleşiyor. Bu nedenle bu iki grubu iki ayrı dosyaya yazdırmak işinize yarayabilir. Burada yapmanız gereken 1> ve 2> ile sırasıyla normal veriyi ve hataları başka dosyalara göndermek. Örneğin, ./configure 1>normal.txt 2>hata.txt satırıyla programın normal metnini normal.txt dosyasına, hataları ise hata.txt dosyasına yazdırabiliriz.
  4. Derleme işlemleri uzun sürdüğü için configure ve make işlemlerini ardarda yaptırmak isteyebilirsiniz. Burada dikkat edilmesi gereken nokta şu: Eğer yukarıda anlatıldığı şekilde bir script(batch) dosyası oluşturup bu iki komutu alt alta yazarsanız, birinci komut hata verse de ikinci komut yapılacaktır. Ör: ./configure make hatalı bir kullanımdır. Birincinin düzgün tamamlanması halinde ikinci programı başlatmak istersem ikisi arasına && koymak gerekir. Ör: ./configure && make

Printout of All Source Files

enscript -2rE -C -o - src/*.cpp src/*.h | pstopdf -i -o print.pdf && open print.pdf

Sample Makefile

Some Information about Makefile's =================================
  1. Type "make" on the command line to make the project.
  2. You need to install the GNU make utility.
  3. Type "make clean" to remove object files.
  4. @ suppresses output.
  5. pkg-config automatically finds the required compiler and linker flags for developing against a library.
  6. Issue "export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/" if pkg-config can't find the libraries This directory contains *.pc files.
  7. $< : an element of the dependencies (to the right of : ) $^ : all dependencies $@ : target (to the left of : )
  8. Command prototype is : targets : prerequisites TAB command
  9. Tabs must be used for indentation; not spaces.
  10. CPPFLAGS are preprocessor flags, CFLAGS are flags for the C compiler (also to be supplied at linking time), CXXFLAGS are flags for the C++ compiler (also to be supplied at linking time)
  11. If you have a single C++ file, compile using (no need for a Makefile): g++ `pkg-config --cflags itpp` -o my_prog my_prog.cpp `pkg-config --libs itpp`
Tabs are important for Makefiles; copying-pasting the following won't work since tabs are gone in blogger. (or download it here)

CXX=@g++
CPPFLAGS=$(shell pkg-config --cflags itpp)
CXXFLAGS=-Wall
LDFLAGS=$(shell pkg-config --libs itpp)

SOURCES=  $(wildcard *.cpp) # Or manually list the source files here
OBJECT=$(SOURCES:.cpp=.o)
OBJECT_DIR=obj
OBJECTS= $(patsubst %,$(OBJECT_DIR)/%,$(OBJECT))
EXECUTABLE=../btctest

all: $(SOURCES) $(EXECUTABLE)
INSERT TAB HERE@echo Finished without errors.

$(EXECUTABLE) : $(OBJECTS)
INSERT TAB HERE @echo Linking...
INSERT TAB HERE$(CXX) $(CXXFLAGS) $(LDFLAGS) $^ -o $@

$(OBJECT_DIR)/%.o: %.cpp
INSERT TAB HERE @echo Compiling $^
INSERT TAB HERE $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $< -o $@   dist : $(SOURCES) $(EXECUTABLE) $(OBJECTS)  INSERT TAB HEREcd ../.. && tar -cjf a.tar.bz2 btc_itpp/src/ btc_itpp/btctest btc_itpp/Makefile
.PHONY: clean
clean:
INSERT TAB HERE @echo Cleaning object files...
INSERT TAB HERE @rm -rf $(OBJECTS)


To call it from parent dir:

# This file calls the other Makefile inside the src/ 

all:
INSERT TAB HERE@$(MAKE) -C src

clean:
INSERT TAB HERE @$(MAKE) -C src clean

dist:
INSERT TAB HERE @$(MAKE) -C src dist

doc: src
INSERT TAB HERE /Applications/Doxygen.app/Contents/Resources/doxygen Doxyfile