To show an image file to X,

showimg::
<TAB>qiv -mtf *png

Also  you can call any rule like this.

$ make rule2

when you have two lines like this anywhere in the makefile.

rule2::
<TAB>echo "Rule 2"

-Girish

On Fri, Jun 18, 2010 at 4:59 PM, Girish Venkatachalam
<[email protected]> wrote:
> Dear all,
>
> This mail is an attempt to teach makefiles in UNIX. Makefiles work the
> same way everywhere even in
> Windoze. There are also several names for the make tool. tmake, pmake,
> gmake, nmake and so on. ;)
>
> But all of them work similarly.
>
> In the BSD world makefiles are more subtle and much shorter. Makefiles
> also work differently in the
> autoconf world with configure script, Makefile.in , Makefile.am and so on.
>
> As you can see it is very complicated, complex and needlessly boring. But
> this does not take away the fact that makefiles are a beautiful thing.
>
> I shall try to illustrate this idea in this mail.
>
> $ make
>
> will try to execute the first rule in the makefile found in the
> current directory.
>
> makefile can be named "makefile" or "Makefile" or "MAKEFILE".
>
> But it almost always is named "Makefile".
>
> A makefile is organized as
>
> rule :: dependency.c dependency.h foo.c ba.c
> <TAB>gcc foo.c ba.c dependency.c -o rule
>
> I think you get the idea.
>
> rule name is also the target name.
>
> In other words, you tell the makefile or in essence the make utility that
>  to create the target "rule" you need to execute the line given with
> a <TAB> character
>  directly below the rule line.
>
> And you also tell makefile that whenever any of the files
>
> "dependency.c dependency.h foo.c ba.c"
>
> change the target has to be updated.
>
> In other words make helps you keep your targets up-to-date.
>
> But all these are academic words without much meaning to hackers.
>
> So let me now talk in practical lingo.
>
> If you wish to create a mp3 file from a bunch of wav files or
>  if you wish to dump a file an image file, you can write rules like these.
>
> out.mp3 : in.wav
> <TAB>ffmpeg -i in.wav out.mp3
>
> You can also call it like this.
>
> createmp3: in.wav
> <TAB>ffmpeg -i in.wav out.mp3
>
> The rule name need not correspond to the target file created.
>
> It is just a name after all like Girish.
>
> And the dependencies can be nil too.
>
> clean::
> <TAB>rm -rf *.o
>
> will remove all the object files unilaterally.
>
> Makefiles are a very powerful UNIX "power tool" and it takes a lot of
> experience and
> knowledge to use it effectively.
>
> I have not been using it well yet.
>
> But remember that there are makefile variables, shell variables,
> makefile if conditions
> and while loops  and they should not interfere with shell's if and while .
>
> If you wish to write a shell script like this.
>
> $ for file in `ls /etc/`
>   do
>        echo $file
>   done
>
> in a Makefile they have to be written like this.
>
> printfilesinetc::
>       for file in `ls /etc/`; do \
>        echo $$file; \
>        done
>
> Reason being that the makefile rule line is exactly that. Just one line.
>
> So if you wish to run multiple commands you need to run like this.
>
> <TAB>cd /etc/ && cat passwd
>
> and if you wish to background processes, you write like this:
>
>           (rm -rf /tmp&) && \
>           echo "started the removal in background"
>
> Also if you wish to avoid echoing of executed rule commands you need
> to prefix a @.
>
> printhello::
> <TAB>echo "hello"
>
> should actually be
>
> printhello::
> <TAB>@echo "hello"
>
> Try it and you will know.
>
> Have fun!
>
> -Girish
>
> --
> Gayatri Hitech
> web: http://gayatri-hitech.com
>
> SpamCheetah Spam filter:
> http://spam-cheetah.com
>



-- 
Gayatri Hitech
web: http://gayatri-hitech.com

SpamCheetah Spam filter:
http://spam-cheetah.com
_______________________________________________
ILUGC Mailing List:
http://www.ae.iitm.ac.in/mailman/listinfo/ilugc

Reply via email to