<p>I've been using make and makefiles for many many years, and although the concept
is sound, the implementation has something to be desired.</p>

<p>Has anyone found any good alternatives to make that don't overcomplicate
the problem?</p>

[{'answer_id': 66822, 'author': 'davetron5000', 'author_id': 3029, 'author_profile': 'https://Stackoverflow.com/users/3029', 'pm_score': 2, 'selected': False, 'text': '<p>Ruby\'s make system is called rake: <a href="http://rake.rubyforge.org/" rel="nofollow noreferrer">http://rake.rubyforge.org/</a></p>\n\n<p>Looks quite promising.</p>\n\n<p>There\'s always Ant: <a href="http://ant.apache.org" rel="nofollow noreferrer">http://ant.apache.org</a>, which I personally find horrendous.  It\'s the de-facto standard for Java development, however.</p>\n'}, {'answer_id': 66824, 'author': 'WaldWolf', 'author_id': 9764, 'author_profile': 'https://Stackoverflow.com/users/9764', 'pm_score': 6, 'selected': True, 'text': '<p>check out <a href="http://www.scons.org/" rel="noreferrer">SCons</a>. For example Doom 3 and Blender make uses of it.</p>\n'}, {'answer_id': 66862, 'author': 'Clinton Dreisbach', 'author_id': 6262, 'author_profile': 'https://Stackoverflow.com/users/6262', 'pm_score': 4, 'selected': False, 'text': '<p>I recommend using <a href="https://github.com/ruby/rake" rel="noreferrer">Rake</a>. It\'s the easiest tool I\'ve found.</p>\n\n<p>Other good tools I\'ve used, though, if Ruby\'s not your thing, are:</p>\n\n<ul>\n<li><a href="http://www.a-a-p.org/" rel="noreferrer">AAP</a> (Python)</li>\n<li><a href="http://www.scons.org/" rel="noreferrer">SCons</a> (Python)</li>\n<li><a href="http://ant.apache.org/" rel="noreferrer">Ant</a> (Java, config in XML, pretty complex)</li>\n</ul>\n'}, {'answer_id': 66876, 'author': 'Daniel Spiewak', 'author_id': 9815, 'author_profile': 'https://Stackoverflow.com/users/9815', 'pm_score': 2, 'selected': False, 'text': "<p>It sort of depends on what you're trying to do.  If <em>all</em> you want is make-style target dependencies and command invocation, then Make is actually one of the better tools for the task.  :-)  Rake is very nice, but can be clumsy for some simple cases.  Ant is of course verbosity city, but it has better support for building Java-like languages (Scala and Groovy included).  Also, Ant is available <em>everywhere</em>.  That's the main reason I use it.  Because it works consistently on Windows, it's actually even more cross-platform than Make.</p>\n\n<p>If you want dependency management for Java-like libraries, Maven is the canonical choice, but I personally like Buildr a lot better.  It's faster and much easier to customize (it's based on Rake).  Unfortunately, it isn't quite as ubiquitous as Maven just yet.</p>\n"}, {'answer_id': 66898, 'author': 'Todd Gamblin', 'author_id': 9122, 'author_profile': 'https://Stackoverflow.com/users/9122', 'pm_score': 5, 'selected': False, 'text': '<p>I have a lot of friends who swear by CMake for cross-platform development:</p>\n\n<p><a href="http://www.cmake.org/" rel="noreferrer">http://www.cmake.org/</a></p>\n\n<p>It\'s the build system used for <a href="http://www.vtk.org/" rel="noreferrer">VTK</a> (among other things), which is a C++ library with cross-platform Python, Tcl, and Java bindings.  I think it\'s probably the least complicated thing you\'ll find with that many capabilities.</p>\n\n<p>You could always try the standard <a href="http://en.wikipedia.org/wiki/GNU_build_system" rel="noreferrer">autotools</a>.  Automake files are pretty easy to put together if you\'re only running on Unix and if you stick to C/C++.  Integration is more complicated, and autotools is far from the simplest system ever.</p>\n'}, {'answer_id': 66902, 'author': 'Eric Talevich', 'author_id': 10049, 'author_profile': 'https://Stackoverflow.com/users/10049', 'pm_score': 4, 'selected': False, 'text': '<p>Some of the GNOME projects have been migrating to <a href="http://code.google.com/p/waf/" rel="noreferrer">waf</a>.</p>\n\n<p>It\'s Python-based, like Scons, but also standalone -- so rather than require other developers to have your favorite build tool installed, you just copy the standalone build script into your project.</p>\n'}, {'answer_id': 66938, 'author': 'Rob Wells', 'author_id': 2974, 'author_profile': 'https://Stackoverflow.com/users/2974', 'pm_score': 0, 'selected': False, 'text': "<p>I'm not sure if you are asking the correct question here.</p>\n\n<p>Are you after a simplified make? In which case, you need to get someone who is very familiar with make to create a series of (M|m)akefiles that will simplify your problem.</p>\n\n<p>Or are you wanting to look at the underlying technology? Are we wanting to enforce a design-by-contract type architecture which is built in to, and enforced in, the code design? Or possibly, the language itself, e.g. Ada and its concept of specs (interfaces) and bodies (implementations)?</p>\n\n<p>Which direction you are after will definitely affect the potential results of such a question?</p>\n\n<p>Basically, new ways of building systems from only those components that have really changed versus adoption of new technologies that have such mechanisms built in by design.</p>\n\n<p>Sorry it's not a direct answer. Just wanted to try and get you to evaluate which path you wanted to head down.</p>\n\n<p>cheers,</p>\n\n<p>Rob</p>\n"}, {'answer_id': 67138, 'author': 'Allan Wind', 'author_id': 9706, 'author_profile': 'https://Stackoverflow.com/users/9706', 'pm_score': 2, 'selected': False, 'text': '<p>I still prefer make after having considered a bunch of the alternatives.  When you auto-generated dependencies either via the compiler or something like fastdep there is not much left to do.  In particular I do not want my build script to be tied to the implementation language, and I don\'t like writing stuff in XML when more readable alternatives are available.  A tool that expose a general purpose language has merit though, but yet another interpreted language does not (afaik).  <a href="http://freecode.com/articles/what-is-wrong-with-make" rel="nofollow noreferrer">What is Wrong with Make?</a> might appeal to your point of view about moving away from make.</p>\n\n<p>/Allan</p>\n'}, {'answer_id': 9936777, 'author': 'schettino72', 'author_id': 64444, 'author_profile': 'https://Stackoverflow.com/users/64444', 'pm_score': 4, 'selected': False, 'text': '<p><a href="http://pydoit.org" rel="noreferrer">doit</a> is a python tool. It is based in the concepts of build-tools but more generic.</p>\n\n<ul>\n<li>you can define how a task/rule is up-to-date (not just checking timestamps, target files are not required)</li>\n<li>dependencies can be calculated dynamically by other tasks</li>\n<li>task\'s actions can be python functions or shell commands</li>\n</ul>\n'}, {'answer_id': 10807947, 'author': 'bu11d0zer', 'author_id': 1070205, 'author_profile': 'https://Stackoverflow.com/users/1070205', 'pm_score': 1, 'selected': False, 'text': '<p>FlowTracer from RTDA is another good choice that I have seen used commercially in a large scale environment (tens of thousands of jobs): <a href="http://www.rtda.com/flowtracer-design-flow-infrastructure-software" rel="nofollow">http://www.rtda.com/flowtracer-design-flow-infrastructure-software</a></p>\n\n<p>It has a GUI which shows the dependency graph with color-coded boxes for jobs and ovals for files.  When the number of jobs and files gets high, a GUI-based tool like FlowTracer is pretty much essential.</p>\n\n<p>The initial setup cost is higher than Make.  There\'s a learning curve for setting up your first flow using it.  After that, it gets quicker.</p>\n'}, {'answer_id': 15550721, 'author': 'Hotschke', 'author_id': 1057593, 'author_profile': 'https://Stackoverflow.com/users/1057593', 'pm_score': 3, 'selected': False, 'text': '<p>Be aware of the <a href="https://ninja-build.org/" rel="nofollow noreferrer"><code>ninja</code></a> build tool (v1.8.2 Sept 2017) which is influenced by <a href="http://gittup.org/tup/" rel="nofollow noreferrer"><code>tup</code></a> and <a href="https://github.com/apenwarr/redo" rel="nofollow noreferrer"><code>redo</code></a>.</p>\n\n<p>The build file generator <a href="http://cmake.org" rel="nofollow noreferrer"><code>cmake</code></a> (e.g. for Unix Makefiles, Visual Studio, XCode, Eclipse CDT, ...) can also generate <code>ninja</code> build files since version 2.8.8 (April 2012) and, afaik, <code>ninja</code> is now even the default build tool used by <code>cmake</code>.</p>\n\n<p>It is supposed to outperform the <code>make</code> tool (better dependency tracking and is also parallelized).</p>\n\n<p><code>cmake</code> is an already well-established tool. You can always choose later the build tool without modifying your configuration files. So if a better build is developed in the future which will be supported by <code>cmake</code> you can switch to it conveniently.</p>\n\n<p>Note that for c/c++ improving compilation time is sometimes limited because of headers   included through the preprocessor (in particular when using header-only libs, for instance <a href="http://www.boost.org" rel="nofollow noreferrer">boost</a> &amp; <a href="http://eigen.tuxfamily.org" rel="nofollow noreferrer">eigen</a>) which hopefully will be replaced by the proposal of <a href="https://stackoverflow.com/questions/3596147/modules-in-c11">modules</a> (in a technical review of c++11 or eventually in c++1y). Check out this <a href="http://isocpp.org/blog/2012/11/modules-update-on-work-in-progress-doug-gregor" rel="nofollow noreferrer">presentation</a> for details on this issue.</p>\n'}, {'answer_id': 21004510, 'author': 'tonyfischetti', 'author_id': 3174755, 'author_profile': 'https://Stackoverflow.com/users/3174755', 'pm_score': 3, 'selected': False, 'text': '<p>I wrote a tool called <a href="http://tonyfischetti.github.io/sake/" rel="noreferrer">sake</a> that tried to make writing makefile-like things very easy to read and write.</p>\n'}]
['https://Stackoverflow.com/questions/66800', 'https://Stackoverflow.com', 'https://Stackoverflow.com/users/9593/']