Cross Compiling Qt
On of the great aspects of Qt is that it is cross platform. Not only across desktops, but also across devices. The Qt make tool, qmake, can be configured to cross compile for different architectures using different compilers and different settings. How to do all this is reasonably straight forward, but you need to know how to get started.
When you've downloaded and extracted Qt you find yourself facing a configure script with loads of options. Trying to get control of them all can feel overwhelming the first time, so it is good to know what is about to happen.
When you run configure, the build tool, qmake, is built, containing the configuration. This has the implication that you can have multiple qmake binaries for different build targets. QMake is then used to build Qt for the target.
Qt is built from a set of modules, which are separate libraries. This means that you do not have to decide on which modules to use when configuring. Instead, just build everything and make the decision later (using the QT variable in your project file - this is outside the scope of this article). The same applies to plugins (database drivers, image formats, etc).
What is important is if you want to build Qt static or dynamic, if you want to use platform libs for various features (libjpeg, zlib, libpng, etc). Another important, and not so straight forward, configuration option is the compiler to use. This is controlled by what is known as an mkspec - a make specification.
Qt comes with quite a few prepared mkspecs, but it is not uncommon to tweak them a little. They are all kept in the mkspec subdirectory of Qt, with another subdirectory for embedded targets called qws. The spec consists of the files qmake.conf and qplatformdefs.h. The latter is pretty easy to reuse between Linuxes. It defines a number of structures and functions for the underlaying system. The former, qmake.conf, tells qmake how to compile.
Once having found the file, reading it is pretty straight forward. For instance, the QMAKE_CXX variable should list the C++ compiler to use, QMAKE_CXXFLAGS lists the flags to use when invoking the C++ compiler, and so on.
Having all this in place, simply use the -xplatform to specify the spec to use. This argument uses the mkspec directory as base, so to use the $(QTDIR)/mkspec/qws/linux-arm-g++ specify -xplatform qws/linux-arm-g++.
Finally, adding the arguments -nomake demos and -nomake examples can save quite a lot of time.
Johan Thelin is a consultant working with Qt, embedded and free
software. On-line, he is known as e8johan.
Realizing the promise of Apache® Hadoop® requires the effective deployment of compute, memory, storage and networking to achieve optimal results. With its flexibility and multitude of options, it is easy to over or under provision the server infrastructure, resulting in poor performance and high TCO. Join us for an in depth, technical discussion with industry experts from leading Hadoop and server companies who will provide insights into the key considerations for designing and deploying an optimal Hadoop cluster.
Sponsored by AMD
If you already use virtualized infrastructure, you are well on your way to leveraging the power of the cloud. Virtualization offers the promise of limitless resources, but how do you manage that scalability when your DevOps team doesn’t scale? In today’s hypercompetitive markets, fast results can make a difference between leading the pack vs. obsolescence. Organizations need more benefits from cloud computing than just raw resources. They need agility, flexibility, convenience, ROI, and control.
Stackato private Platform-as-a-Service technology from ActiveState extends your private cloud infrastructure by creating a private PaaS to provide on-demand availability, flexibility, control, and ultimately, faster time-to-market for your enterprise.
Sponsored by ActiveState
| Non-Linux FOSS: libnotify, OS X Style | Jun 18, 2013 |
| Containers—Not Virtual Machines—Are the Future Cloud | Jun 17, 2013 |
| Lock-Free Multi-Producer Multi-Consumer Queue on Ring Buffer | Jun 12, 2013 |
| Weechat, Irssi's Little Brother | Jun 11, 2013 |
| One Tail Just Isn't Enough | Jun 07, 2013 |
| Introduction to MapReduce with Hadoop on Linux | Jun 05, 2013 |
- Containers—Not Virtual Machines—Are the Future Cloud
- Non-Linux FOSS: libnotify, OS X Style
- Linux Systems Administrator
- Validate an E-Mail Address with PHP, the Right Way
- Lock-Free Multi-Producer Multi-Consumer Queue on Ring Buffer
- Senior Perl Developer
- Technical Support Rep
- UX Designer
- Introduction to MapReduce with Hadoop on Linux
- RSS Feeds
- Bought photoshop CS5 for developing a website :(
2 hours 1 min ago - What the author describes
3 hours 27 min ago - Reply to comment | Linux Journal
7 hours 38 min ago - Reply to comment | Linux Journal
8 hours 23 min ago - Didn't read
8 hours 33 min ago - Reply to comment | Linux Journal
8 hours 38 min ago - Poul-Henning Kamp: welcome to
10 hours 48 min ago - This has already been done
10 hours 49 min ago - Reply to comment | Linux Journal
11 hours 35 min ago - Welcome to 1998
12 hours 23 min ago



Comments
Unknown option -xplatform
When using Qt Creator under Ubuntu, the option '-xplatform' is unknown (full description can be found at http://www.richelbilderbeek.nl/CppQtCrosscompileToWindowsExample5.htm):
Starting: "/usr/bin/qmake-qt4" /home/richel/qtsdk-2010.04/bin/Projects/Website/CppQtCrosscompileToWindowsExample5/CppQtCrosscompileToWindowsExample5.pro -r -spec linux-g++ CONFIG+=debug -xplatform win32-g++
***Unknown option -xplatform
What am I missing?
Configure, not qmake
Hi, -xplatform is an argument to be given to the configure script of Qt, not to qmake.
Johan Thelin is a consultant working with Qt, embedded and free
software. On-line, he is known as e8johan.
Teaser
Cross-compiling is not as simple as selecting something from a combobox (yet). This IMHO exciting article gives me the feeling that we're nearly there: one needs only a cross-platform compiler (like mingw) and to modify the Qt/qmake project file. Too bad, the article hasn't been detailed enough for me to get it working. I really look forward to a complete example!