Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I am seeking some ideas for how to build and install software with some parameters. These including target OS, target platform CPU details, debugging variant, etc. Some parts of the install are shared, such as documentation and many platform independent files, others are not, such as 64 and 32 bit libraries when these are separated and not together in a multi-arch library.

On big networked platforms one often has multiple computers sharing some large server space, so there is actually cause to have even Windows and Unix binaries on the same disk.

My product has already fixed an install philosophy of $INSTALL_ROOT/genericname/version/ so that multiple versions can coexist.

The question is: how to manage the layout of all the other stuff?

share|improve this question
You may want to see how GNU programs are built. They have solved this for their needs a while back. – user1249 Dec 26 '11 at 10:32
Considering the many many many many issues of sharing Windows and UNIX binaries I've not seen it done in practice. – Karlson Jan 6 '12 at 13:55

Given that when a package is installed in a system - there is only 1 system at hand. i.e. OS, CPU/Arch, 32/64 bits variables are fixed for that system target.

In this context, usually i would NOT make separate folder like


Rather, i would define it as part of the naming. Look at it for example the RPM file naming convention:


It does include the distribution version number as like like fc8 or fc11 etc.

Debian follows a similar naming convention but probably the packages have some internal directory layout. (Sorry donno details here!)

share|improve this answer
Depends on the platform. Mac OS X supports universal binaries with several targets inside a single deployment. – user1249 Dec 26 '11 at 10:27
Unfortunately the "given" is incorrect. Almost all desktops run Intel x86_64 CPUs and both Linux and OSX support both 32 and 64 bit code. In addition as mentioned on enterprise networks there are many computers with different archs sharing a file server so we need to install multiple archs in a single file system. – Yttrill Dec 26 '11 at 15:16
@Yttrill ok, I didn't assume that requirement. As a general rule, whatever needs multiple instance may have a directory of it's own; everything else should go in a file naming convention. – Dipan Mehta Dec 26 '11 at 15:56

At one time, I worked for an SAN manufacturer in the build group. We had to support about 40 different operating systems.

The distributions were organized by major OS families at the root level of the distribution media (CD and DVD), such as HPUX, Z/OS and Windows, with versions branching off those. So for example, the Windows branch would have Server and Workstation off that folder, and each would have a set of x86, x64, ia64 and Alpha folders, each with their own installs.

share|improve this answer

Use a build tool which allows different source and target directories. For each platform have a separate target directory into which the platform specific files are generated.

Builds may run faster if you use a common build directory for non-platform specific files.

share|improve this answer
Yes, but the question really asks "what is a platform"? I already use such a build tool. Is it enough to have completely separate targets for every variation? Eg debugging or non-debugging libraries? If so how do you name the target directories .. that's the real question. – Yttrill Dec 26 '11 at 15:18

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.