Skip to main content

Autohell and CMake

Time for another software related post.

People familiar with the GNU/Unix system would know that the standard way to install about any GNU software from code is to run the following commands

  • configure
  • make
  • sudo make install

These commands are from the GNU autotools environment. Knowing the GNU environment, these tools are what I used to compile most of the (relatively small) pieces of code I wrote.

Until I discovered CMake.

CMake, or Cross-platform Make is a tool that serves the same functionality as the GNU autotools (hereafter referred to as autohell). As the name suggests, CMake can be used to compile software across multiple platforms.

Why am I encouraging CMake over autohell? Well, firstly, it’s not autohell! The GNU autotools are extremely useful when compiling on Linux. That’s what they are designed for. Cross compilation is extremely easy with the --host= flag. Unfortunately, when it comes to using them on Windows, the system just becomes a pain in the neck.

People who have tried to compile a GNU package on Windows would know what I’m speaking about. You type in configure, wait for about half an hour while the script does its job in the MSYS terminal, then enter make -j4 (to speed up the process), wait for an hour while libtool compiles the bloody code, then make install (finally!).

The reason why the process is so painfully slow is that autotools, at their heart are just shell scripts. This means that while compiling for Windows, in an MSYS terminal, the shell script is parsed by sh.exe, which is a slow emulator of the Unix shell. Further, when the configure script has done its job, the Makefile takes over, which relegates all compile operations to libtool, which is another bloody shell script. More sh.exe calls! The result? A painfully slow compile and installation process. Contrast that with CMake. Now, CMake exists on all platforms. It’s simple and elegant, and allows a choice of compilers, right from MSYS Makefiles, to CodeBlocks MinGW projects, to Visual Studio project files.

To prove my point, I’d just recommend that you checkout a simple project (Library management system, my 12th grade project) in my GitHub repository, which can be compiled using autohell as well as CMake. The CMake step takes a second, while autohell takes over a minute (on Windows). Moreover, the CMakeLists.txt file is short and sweet, and was written in under a minute. By contrast, I took ages to write autohell files, what with, and stuff. I switched from autohell to CMake immediately.

Popular posts from this blog

Progressive Snapshot: Is it worth it?

I turned 25 last year, which in the highly mathematical and calculating eyes of the US insurance industry meant that I had suddenly matured into a much more responsible driver than I was at 24 years and 364 days of age. As a result, I expected my insurance rates to go down. Imagine my surprise when my insurance renewal notice from GEICO actually quoted a $50 increase in my insurance rates. To me, this was a clear signal that it was time to switch companies.Typically, I score really high on brand loyalty. I tend to stick with a brand for as long as possible, unless they really mess up. This qualified as a major mess up. As a result, I started shopping for insurance quotes.Two companies that quoted me significantly lower rates (30%–40% lower) were Progressive and Allstate. Both had an optional programme that could give me further discounts based on my consenting to the companies tracking my driving habits. Now, I am a careful driver – I hardly ever accelerate hard. I hate using the brak…

Cornell Graduate Students United: At What Cost?

On Monday and Tuesday, we graduate students at Cornell will be voting on whether or not we want to unionise. Actually, scratch that, only graduate students who hold a TA, RA, or GRA appointment can unionise.This is a shitty arrangement, and I will be voting against it.For those of you who are not aware of how graduate school works at Cornell, you could be on one of many appointments.FellowshipA graduate student on a fellowship gets a stipend and tuition paid without associated teaching or research opportunities. Graduate students on a fellowship typically work towards their own theses, but will be excluded from the unionGraduate research assistantshipsA GRA gives a graduate student stipend and tuition without teaching responsibilities. However, this money comes out of a specific project grant, and the students typically work on their own theses. Students on GRAs magically qualify to join the union, whereas there is virtually no difference between a GRA and a fellowship for the most pa…

Reading List, April 2017

Adam Carroll, When money isn’t real: The $10,000 experiment, in TEDxLondonBusinessSchool, 9 July 2015. [Online]: Carroll presents an interesting point – we have abstracted away money through the use of a number of instruments, such as credit and debit cards, NFC payment systems on our phones, and in-app purchases, when we don’t realise how much we are actually spending. Carroll spends some time showing how his kids, aged 7–11 played monopoly differently when they were playing with real money. He goes on to lay his premise, that financial literacy must be taught to children at a young age, when they should be allowed to fail and learn from their failures at a small scale, not at the hundreds of thousands of dollars when they are in student loan debt and just out of college.Carroll’s talk hit a lot of notes with my own experiences with money, and I’m sure that it would resonate with your experiences as well.Brett Scott, If plastic replaces cash, much tha…