A share on my frustrations on C/C++ build system coming from Java

One of the things I hated the most when I started developing in Java was something called "Maven". Whenever I heard that word I started gettings chills of anger - I could not understand why would I want any application to do the job Eclipse already did well - compiling.

However once I started developing l2jserver2 I saw that Maven was not about compiling - not even close that! It was all about integration. Integration of the compiling process, the packacking, the dependency management, the deploying and your IDE - they all in a neat package, one command away. You no longer have to worry about installing dependencies or handling uploads of libraries - not even documentation distribution. Maven can do all that for you. And boy... it is easy.

mvn compile
mvn run
mvn package
mvn deploy

With any of the given commands, you can do tasks that would have taken a lot of time to configure manually. It will even handle dependent actions, like if you try to run without compiling, Maven will first issue a compile followed by a run.

Configuring is all about ease too, for example, you just need to set a folder for your Java sources and Maven takes down the rest. It discover all the files, compiles them and you are done. Want to run it? Tell it what's the main class and you got it.

So far I have not found any build sytem for C/C++ that could do even half of what Maven do Java. The closest thing to a good integration solution I found for C/C++ was featured by IDEs.

There are several IDEs that can do a lot of integration work - Xcode and Visual Studio - to name a few. They can really assist you on configuring targets, compilation units and deployment options and all of this with no any lame Makefile or CMakeLists.txt. None of them provide automatic dependeny management and linking... you are on your own on this! Besides, using them keeps you stuck on a proprietary and non-portable standard - Xcode only runs on OS X, VS only runs on Windows.

And there's Eclipse: it is portable, opensource and free. And it sucks (for C/C++ at least). It's UI is really bloated, uses loads of RAM and it's C/C++ autocompletion is not really that good. Don't get me wrong, I think Eclipse is simply amazing for Java development, that just don't hold true for C development. Things are evolving though, a few years ago it didn't even had autocompletion! Maybe in a few years...

Then there's CMake which is a a build system that take interoperability in account. You have the CMake project and you can turn it into a Xcode project (or several other IDEs), the opposite however, is not possible, you can't turn a Xcode (or other IDE) projet into a CMake project. To me, this breaks entirely the purpose of it because it's on the IDE where I do the development and I don't want to be listing all the files i wish to compile and it's flags back to the CMake file.

As for dependency management you get something that looks very roughly to that using a package manager for Linux. You (that's the problem part -- you) can install dependencies automatically, however it is not as automagic as to how Maven does.

So far, those where the "best" experiences I had with integration on C/C++ build systems... not even close to what Java can offer with Maven.