mirror of
https://github.com/edeproject/ede.git
synced 2023-08-10 21:13:03 +03:00
Dump unfinished item. This should be completed on wiki.
This commit is contained in:
parent
44d997a075
commit
c6269ccff7
@ -33,6 +33,5 @@
|
||||
*Development*
|
||||
|
||||
- link:hacking.html[Contributing (in your spare time ;-)]
|
||||
- link:jambuild.html[Jam build]
|
||||
- link:dbus-usage.html[D-BUS usage]
|
||||
- link:@EDELIB_API_INDEX@[edelib reference]
|
||||
|
101
doc/jambuild.txt
101
doc/jambuild.txt
@ -1,101 +0,0 @@
|
||||
Jam build
|
||||
=========
|
||||
|
||||
This is a short description of build library for EDE, based
|
||||
on http://www.perforce.com/jam/jam.html[Jam] tool, an alternative to make.
|
||||
But, this is *not* detail tutorial about jam, only detail description
|
||||
of EDE build library. For jam tutorial you should consult jam documentation.
|
||||
|
||||
Introduction
|
||||
------------
|
||||
Why not make, you probably ask yourself, since the rest of the world
|
||||
use it? Well, make is a nice tool for small projects, or relatively
|
||||
large one with monolithic configuration file. This means, if you have
|
||||
1000 files and you want to build them on the same way, make can be useful
|
||||
(sorta of).
|
||||
|
||||
On other hand, if you want some of them to have specific requirements,
|
||||
like linking with sound libraries (for example, ecalc does not have any
|
||||
sound needs, but window manager does), this can't be accomplished without
|
||||
unreadable and error prone make code mess.
|
||||
|
||||
Most projects often link every needed library with every binary inside tree,
|
||||
and relay on compiler to figure out what will go into that binary or not.
|
||||
Don't have to say how this slows things considerably (since compiler have
|
||||
to scan each library, if is static). On other hand, in case of shared
|
||||
libraries (today very often), that library 'will be tied to' that binary, even
|
||||
if binary does not use any function from it. It is silly that ecalc requires,
|
||||
for example, libogg for startup, even if it does not use any function from it!
|
||||
|
||||
In EDE 1.x we had pretty simple build system based on make (without automake stuff
|
||||
because is... ah, check comments online about it :-P) that served us very well.
|
||||
|
||||
But it had a lot of limitation. You couldn't, as sample, specify '-DSHAPE' flag
|
||||
for a window manager without passing it to every program in the tree. The same
|
||||
applies for linked libraries too.
|
||||
|
||||
Jam is designed for these cases and when they occur, it is like homeland for him.
|
||||
So, you want only 'foo.cpp' from 'baz' directory to get '-DXYZ' flag, no problem. Or you
|
||||
want that every file in 'baz' directory (no matter is it binary or shared library)
|
||||
be linked with 'libtaz'; no problem either.
|
||||
|
||||
So how it looks like
|
||||
--------------------
|
||||
Here are few samples with syntax explanation.
|
||||
|
||||
Let say you have 'foo.cpp', a cool application and you want to create executable from
|
||||
it. This is the way:
|
||||
|
||||
-------------------------
|
||||
# this is an comment
|
||||
Main foo : foo.cpp ;
|
||||
-------------------------
|
||||
|
||||
End :) Jam will see it as C\+\+ file and call a C\+\+ compiler in the background. Or, you
|
||||
want to link it with libbaz.a library, it is like:
|
||||
|
||||
-------------------------
|
||||
# this is an comment
|
||||
Main foo : foo.cpp ;
|
||||
LinkLibraries foo : libbaz ;
|
||||
-------------------------
|
||||
|
||||
As you can see, you give to it 'full' library name *without* extension. Jam will figure
|
||||
out how to strip 'lib' part and pass correct parameters to the compiler. Jam is
|
||||
very portable and runs almost everywhere (with various compilers), this 'unified' naming is needed
|
||||
because different compilers see/get/creates libraries names on different ways.
|
||||
|
||||
This is sample how to create your own library and link own program with it:
|
||||
|
||||
-------------------------
|
||||
Library libmylib : file1.cpp file2.cpp file3.cpp ;
|
||||
Main foo : foo.cpp ;
|
||||
LinkLibraries foo : libmylib ;
|
||||
-------------------------
|
||||
|
||||
Here it will be created 'libmylib.a' (with gcc compiler) and 'foo' will be linked with it. Order
|
||||
or 'rules' ('Main', 'LinkLibraries' and 'Library' are called *rules*; you can see it as plain
|
||||
C/C\+\+ function) is not important, so:
|
||||
|
||||
-------------------------
|
||||
Main foo : foo.cpp ;
|
||||
LinkLibraries foo : libmylib ;
|
||||
Library libmylib : file1.cpp file2.cpp file3.cpp ;
|
||||
-------------------------
|
||||
|
||||
will do the same job. Jam builds internally dependency tree so order is not important to it.
|
||||
|
||||
[NOTE]
|
||||
.Something to know
|
||||
===================================
|
||||
You could notice that at each line is ended with ';' character
|
||||
and *space* before it. That is *needed* or jam will not
|
||||
parse line correctly. So *every* line with expression
|
||||
must have space before ending ';' character, like:
|
||||
|
||||
- 'something ;' (good)
|
||||
- 'something;' (bad) !!!
|
||||
|
||||
Well, that is a jam syntax :-)
|
||||
|
||||
===================================
|
Loading…
Reference in New Issue
Block a user