You don't really need to understand Jam in order to get it to work.
The output of the jamtemplate/createproject.sh script is a
ready-to-use build system. For simple projects, you typically don't
need to edit Jamfiles or understand Jam at all. One thing that you
should know, however, is that whitespace is significant in Jam, so the
spaces I showed in my examples have to be preserved when inserting
those lines into your Jamfiles.
On 6/20/07, Jim Sager <james_sager5@...> wrote:
> Thank you for your help. I couldn't get Jam to work because I don't
> understand it. However I was able to create a Makefile.
> Eric Sunshine <sunshine@...> wrote:
> Jim Sager wrote:
> > I am now using the ASIO networking library with CS.
> > I used to be able to build my application by going to my CS directory
> > and typing: jam simpmap
> It would be much more correct to develop your application outside of the
> CS tree. We put a lot of effort into, not only making this possible, but
> making it simple and robust. You can create an external project by
> running the jamtemplate/createproject.sh script, which sets up a
> ready-to-build skeleton project on your behalf, complete with configure
> script, Jam build system, built-in Visual Studio project-file creation
> capability, and so forth. Once the skeleton is set up, you just drop
> your source files into the project's "src" directory. See the section
> titled "Jamtemplate" in "4.20.1 Creating an External Crystal Space
> Application" in the CS manual:
> > Now that I am using ASIO, I need to add some extra include directories
> > /home/jim/Desktop/asio/include
> > /home/jim/Desktop/boost2
> > I tried editing the Jamfile in the CS directory by changing the
> > beginning to look like this:
> > IncludeDir ;
> > IncludeDir $(BUILDTOP) include : : literal transient ;
> > IncludeDir "include" ;
> > #I added these two lines:
> > IncludeDir "/home/jim/Desktop/asio/include";
> > IncludeDir "/home/jim/Desktop/boost2";
> The typically correct way to specify additional compiler and linker
> arguments is to define SOMEPACKAGE.CFLAGS and SOMEPACKAGE.LIBS variables
> in the Jamconfig file, where SOMEPACKAGE is an identifier you choose to
> represent the external package which you are attempting to reference. In
> your application-local Jamfile, you would then include the line:
> ExternalLibs myapp : SOMEPACKAGE ;
> Given the Jamtemplate scenario outlined above, normally, you would add a
> configure check for ASIO, and the configure check would be responsible
> for emitting SOMEPACKAGE.CFLAGS and SOMEPACKAGE.LIBS to Jamconfig.
> Creating the configure check usually involves a very simple invocation
> of CS_CHECK_LIB_WITH() in your configure.ac file. See the 'caca' library
> check in CS/configure.ac for an example. An important benefit of using
> configure and CS_CHECK_LIB_WITH() to detect the ASIO library is that it
> generally will do a much better job of figuring out the correct compiler
> and linker flags, and make your project more portable, than hard-coding
> these flags in some Jamfile.
> If you absolutely insist upon mucking around inside CS's own source tree
> for the development of your application, then you can probably add the
> appropriate SOMEPACKAGE.CFLAGS and SOMEPACKAGE.LIBS definitions to CS's
> Jamconfig file or to its top-level Jamfile. Jamconfig is more
> appropriate, but it means that you will have to re-add your definitions
> manually each time you run the configure script.
> ASIO.CFLAGS ?= -I/path/to/headers -Dsome_define
> ASIO.LIBS ?= -L/path/to/library -lasio (or whatever)
> > The big problem is that it takes several minutes instead of a few
> > seconds of compiling only the changed object files.
> > I would like to know how I should edit the Jamfile in the root CS
> > directory, or if I should make a Makefile or something. I'm fairly
> > clueless and yahoo.com searches didn't dredge up enough info for me.
> Best is to stay out of CS itself and encapsulate your application in its
> own project created by Jamtemplate.
> -- ES