As of Fedora 17 it is possible to easily build (cross-compile) binaries for the win32 and win64 targets. This is realized using the mingw-w64 toolchain: http://mingw-w64.sf.net/. Using this toolchain allows you to build binaries for the following programming languages: C, C++, Objective-C, Objective-C++ and Fortran.
To be able to build binaries for the win32 or win64 targets you need to install some packages using yum or the graphical software installer.
Here's a chart indicating which packages provide which functionality:
Once you've installed one (or more) of these packages you should have a new folder on your filesystem called /usr/i686-w64-mingw32/sys-root/mingw (for win32) or /usr/x86_64-w64-mingw32/sys-root/mingw (for win64). These folders contain various pieces belonging to the mingw-w64 toolchain, for example the headers belonging to the Windows API and the import libraries for the default Windows API libraries (like shell32.dll and winsock2.dll).
Now that you've installed a compiler it's time to use it. See the following chart to find out what command you should use to run the compiler:
So if you want to compile a .cpp file and make it an executable for the win64 target, then you could using this command:
x86_64-w64-mingw32-g++ main.cpp -o my_project.exe
For a full list of all command line arguments which are supported by the various compilers, you can check out their man-pages, for example:
Building autoconf-based projects
Most open source projects are using the autoconf infrastructure (./configure; make; make install). This type of projects can be built very easily for the win32 or win64 targets. Just install one of the compiler packages mentioned earlier and replace ./configure with either 'mingw32-configure' or 'mingw64-configure' (depending whether you want to build for the win32 or the win64 target). The mingw32-configure and mingw64-configure scripts are helper scripts which automatically call the ./configure script with the correct environment set
Once the mingw32-configure/mingw64-configure call has completed, you can call 'make' and 'make install' just as you would usually do to build and install a package
It is also possible to pass additional arguments to the mingw32-configure/mingw64-configure calls, for example:
mingw64-configure --enable-foo --disable-bar
When using the mingw32-configure/mingw64-configure scripts, the files belonging to the package in question will automatically be installed to either /usr/i686-w64-mingw32/sys-root/mingw or /usr/x86-64-w64-mingw32/sys-root/mingw when you run 'make install'. That way you can keep all cross-compiled libraries and executables in one central location
Building CMake-based projects
Another popular build system is CMake. Like with the mingw32-configure/mingw64-configure scripts we've also made it easy to build packaging using CMake. For this, you need to have the cmake package installed first. Then you can use the mingw32-cmake or mingw64-cmake commands to run CMake with the correct environment set for the given target. Once the mingw32-cmake/mingw64-cmake command has completed, just use 'make' and 'make install'
Building Qt4-qmake-based projects
The Qt project also has written a build system called qmake (actually: qmake-qt4). This build system is used by various packages which are Qt based. For this build system we've also prepared tools to make cross-compilation for the win32 and win64 targets easy. Just install the packages mingw32-qt-qmake or mingw64-qt-qmake. Once these are installed you can execute the command i686-w64-mingw32-qmake-qt4 or x86_64-w64-mingw32-qmake-qt4 followed by 'make' and 'make install'
Writing .spec files
All the helper scripts which are mentioned earlier can also be used when building RPMS using a .spec file. To find out more about writing .spec files to build cross-compiled packages you should take a look at the Fedora MinGW packaging guidelines: https://fedoraproject.org/wiki/Packaging:MinGW This set of guidelines also contains an example .spec file