Monday, 2 November 2009

Maxbuild v0-1

When i make an external, i usually duplicate an existing one. I got really tired of going through and doing find and replace in multiple files for Xcode and Visual Studio, so i decided to make a bash script and folder layout (with template projects) to automate the process.

To duplicate a project you simply have to open a terminal window, cd to your max external projects folder and type:

sh [inputprojectname] [outputprojectname]


oliver-larkins-macbook-pro-15:maxbuild oli$ sh mb.msp~ ol.mynewmspexternal~

The script copies your project and then goes through all the files and substitutes the old project name for the new one you specify, both in the file name and inside the files. When making changes inside the c or cpp files, the class/function/struct names etc. are substituted but tildes and dots are removed where they would cause problems for the compiler. It includes the following template externals, which have VS2008 express and Xcode 3.1 projects:

  • mb.max - a basic vanila max external
  • mb.maxobex - a basic max object with obex for pattr/attribute functionality
  • mb.maxcpp - a basic c++ max external (with obex)
  • mb.msp~ a basic vanilla msp external
  • mb.mspobex~ a basic msp object with obex for pattr/attribute functionality
  • mb.mspcpp~ a basic c++ msp external (with obex)
Thanks to Graham Wakefield for the C++ templates.

I develop Max externals first on OSX, so it made sense to do the script in bash. I expect you could do a similar thing in Windows too, maybe using cygwin or something similar.

there's a readme with instructions. At the moment this is set up for the MaxUB sdk (4.6). I will add support for the 5.x sdk in the next version.


  1. This comment has been removed by the author.

  2. Hey - that's pretty neat. I've been thinking about doing this myself recently.

    I couldn't be bothered to write a script in the end. However, what I have started doing is using $TARGET_NAME in both my Info.plist files and inside my target for the product name. This way you only need to change the name in one place to compile properly - maybe you should take this approach too, even with the script, because then if you change your mind on an external name it's not a hassle....

    Alex H

  3. If you check out the latest version of the Max 5 SDK, it goes a step further -- it gets the target name from the project's file name. So then the only thing you have to change is the source code file.

    Still, a script is fantastic. I have a similar script I use in Tap.Tools development.