I'm trying to cross-compile libSDL version 1.2 for a custom made, Debian based Linux system. The toolchain I'm using is already configured properly so that I just run gcc/g++ on the desired code and the resulting output is compatible with the target machine.

When I run ./configure --help in the libSDL source directory, I see that I can basically just set some environment variables to point to my cross-compiler.

However, I also see the following options:

System types:
  --build=BUILD     configure for building on BUILD [guessed]
  --host=HOST       cross-compile to build programs to run on HOST [BUILD]

I looked into the configure.in, build-scripts/config.sub, and build-scripts/config.guess files but couldn't really figure out how it works.

Are these options required? If not, is it a good idea to use them?

2 Answers 2


--build=BUILD - is the system where on which the compiled compiler is goint to be ran. This is only for building a cross-compiler on architecture A that will run on architecture B and produce code for architecture C.

--host=HOST - is the system where the compilation happens

--target=TARGET - is the system the compiled binaries are going to run on

See e.g. this cross-compilation introduction.

  • This isn't quite the answer since I'm simply building a library, not an entire compiler. The situation you're talking about is the Canadian cross compilation
    – s g
    Oct 20, 2014 at 21:53
  • You are right it is not answer to the questions: Are these options required? If not, is it a good idea to use them? Rather it is an explanation of what the options do (especially since you are compiling a library but mentioning --build which is really used only for the toolchain).
    – peterph
    Oct 20, 2014 at 22:24

The answer is 'yes', I should specify both. The --build flag will be the architecture of the machine doing the compiling... the scripts can do a good job of guessing what this will be, but it's better to be safe than sorry and actually specify yourself. The --host flag is the necessary part in making this cross-compilation actually work. When my --build and --host flags weren't the same values (for example, i686-generic versus x86_64-linux), the configure scripts would realize that I'm trying to cross compile.

Instead of simply resorting to local compiler (on the host machine, specified somewhere in $PATH), the configure scripts would find a compiler suite (compiler, linker, etc.) either specified as flags or an environment variables (e.g. $CPPFLAGS, $CC, $AR, etc.) and use those.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .