Cross compiling is compiling a program on one computer and then being able to run the output files on a different machine with a different architecture. The computer that is used for compilation is called the host, and the computer where the code should run is called the target. If the host and the target have the same architecture then you are natively compiling. A cross-compiler comes into play when you want to run your code on an architecture which is different from the one you are compiling on.
An example of cross compiling is if you are developing on your machine using an x86 processor, but you want to run your code on a machine that uses an ARM chip. For your code to work, you either have to compile the code on the target machine, or you can use a cross compiler. This also means that you won’t be able to run your code on your own machine unless you are using an emulator.
If you are writing a program that will run on windows using an x86 processor, and all your customers will be using the same processor, then you do not need to use a cross compiler. Your host and the target(s) are the same and you can natively compile.
It is not unusual that the development machine will have a different architecture than the target machine. It can be difficult to always get a one to one mapping between the build environment and the target environment, which makes a cross compiler very useful in some cases.