Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

I'm wondering what generic build tools out there include their binary run-times and do not depend on another environment not shipped with them.

For example, ANT requires Java, Rake requires Ruby, etc..

would be great if talking about also target-platform-agnostic tools, where I'd just give whatever command for building, whatever command for testing, etc.. and can then define my artifacts in CI or so.

Would see something like that useful for building .NET projects (say, on both Windows .NET and Mono), and Node JS projects especially. I do not want to install Java and / or Ruby if what I want is a .NET build or a Node JS build.

This is a bit of general awareness question not an exact problem I'm facing, that's why it's here not on StackOverflow.

Update:

To explain a bit more, what I'm after is the build script that would run MSBuild for compiling for example ( in .NET, and then maybe several Node/NPM commands in Node, etc..), and then have the rest build/test steps, instead of setting these all in MSBuild (again, in .NET case, also, wondering if there is equivalent story in Node).

Update2:

My target is being able to have a developer on a vanilla machine to just clone the code without installing any dependencies except the platform the code targets be it .NET/Mono or Node (not even Java, Ruby, or Python) and still be able to build and run tests.

share|improve this question

closed as not constructive by gnat, Walter, Robert Harvey, Tim Post, Ryathal Nov 30 '12 at 21:34

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.If this question can be reworded to fit the rules in the help center, please edit the question.

    
inedo.com/buildmaster/features might be the right tool for you. –  user281377 Nov 29 '12 at 8:48

6 Answers 6

Sounds like a job for make(1). It's compiled to a native executable, so you don't need to install anything, and can launch any other build tools you might need. If your builds are straightforward (no complicated dependency management or fragmented configuration specifications) then it shouldn't be too hard to set this up. The only thing simpler would be to have a pair of build scripts (one for Windows and one for Linux) you check out with the source.

share|improve this answer

Since you specifically called out Node.js as a platform target, I assume that everyone has that installed on their machines. In that case, have you looked at Grunt? I don't have any real experience with it (I downloaded it, tried making a script, then realized that NPM does most of what I needed), but it appears to be a flexible build tool written on Node.

share|improve this answer

what generic build tools out there include their binary run-times... target-platform-agnostic tools

Above would violate principle of separation of concerns, and quite in a blatant way.

Think of consequences. Such a tool would also need to have a set of binaries for respective target platforms, for all of them and for everyone of them.

This would mean that besides providing build tool functionality, its developers would also have to invest their efforts into platform-specific binaries - design, programming, testing, maintenance, doing new features, bugfixes and testing them again and again and again, over and over again.


Now take a minute to think of long-term perspectives for such a tool. "It's a competitive worls, everything counts in large amounts."

While developers of our monster tool would struggle with specific glitches and pecularities of each and every target platform, over and over and over again, their competitors would have a great time providing extensions, enhancements and new features to build functionality, leveraging on the fact that cumbersome platform specific is covered by underlying third-part runtime.

share|improve this answer
    
Sorry if I didn't express this correctly, what I meant was something that can come standalone, like how an EXE is in windows for example, and unlike a jar file that requires me to install Java. I think Ruby can be stand alone (as in, portable in a folder) on Windows, not sure about Linux though, and I know Node can be portable too, again, at least on Windows. –  Meligy Nov 29 '12 at 8:30
    
So, I didn't mean a build tool that built everything from scratch. When you build an application in C++ for example or whatever, you use several DLLs and such, but those can be packaged as an independent distribution, or can still have dependencies like VC++ Re-distributable stuff. I'm looking for the first. Another example, when you install some Delphi app, it doesn't require you to install Delphi, etc... I'm just checking if such exists anyway, not that I'm saying it "should" exist or so. –  Meligy Nov 29 '12 at 8:34
    
@MohamedMeligy "EXE is in windows" is nice but what would be there for Linux? Mac? other platforms? For comparison, taking Java you mentioned as an example, that "jar file" you talk about would be the only thing to develop and maintain on any platform, that's the point –  gnat Nov 29 '12 at 8:34
    
OK, another example, if I'm doing .NET, I expect the only thing on a dev machine to be .NET or Mono if on Linux. If doing Node, I'd expect the dev machine to only require Node, etc. It's not very rare to see .NET build stuff in Ruby, or even like TeamCity itself (which is accepted exception, because it's not setup on dev machines) in Java. Thinking about "the repo has everything for new dev to start with including running the build (with its tests)" except .NET/Node runtime of course (for an app targeting .NET or Node). Looks like just MSbuild is the way for .NET, not sure for Node. –  Meligy Nov 29 '12 at 8:44
    
Well, I understand what you are after, Mohamed. But I do not have an answer for you, unfortunately. (I tend to use bash, make & gcc for the use-case that you are describing, since these tools are already on the base "vanilla" machines that we deploy to). - In this situation, you may just have to hold your breath and roll your own. –  William Payne Nov 29 '12 at 9:22

Although not completely independent, SCons is a Python based build tool that I've had very good experiences with. Python is pretty commonly available (more so than Ruby?) and the "build scripts" are simple Python files that are very easy to write and maintain.

In a .NET environment, however, I'd still recommend learning some of MSBuild's syntax, as you will ultimately have to use it for some part of the process. (Theoretically you could go without it, but very few . NET devs are going to not be using VS, MonoDev, or something like SharpDevelop, and I think they all generate MSBuild project files.)

share|improve this answer
    
Yeah, I wouldn't even try and not use MSBuild for compilation. Might be logical to even go and use it for everything, I just keep seeing many people tending not to do that, and going for other options like PowerShell and other build systems calling MSBuild. Regarding Python, it's likely as available as Ruby on common Linux distributions by default. Windows doesn't include any of these by default though. My target is being able to have a developer on a vanilla machine to get clone the code without installing any dependencies and still be able to build and run tests. –  Meligy Nov 29 '12 at 8:38
    
Since you are targeting Linux and Windows, I guess that also rules out bash scripts and PowerShell. If you find a tool that's relatively small, you could just push the binary into your repo so it's guaranteed to be available. GCC Make and it's cousins might fit the bill, are available on most platforms, and aren't very large. –  CodexArcanum Nov 29 '12 at 19:52

You don't want platform agnostic so much as the native build tool for .NET. To be precise you should look into MSBuild (.NET) and xbuild (mono). They are functionally equivalent and moreover use the same XML-based build files so you can theoretically handle both .NET and mono without any modifications. In fact, rake or ANT have to call out to MSBuild to actually build any .NET stuff so you are already using it -- the most common MSBuild file ends in .csproj.

I will note that having done a pretty massive amount of MSBuild scripting I would really prefer ruby-based build scripts over XML-based build scripts. Turing-complete languages in XML are verbose.

I'm only tangentially familiar with node.js so I could be wrong but my impression is there isn't really a build there -- it is all interperted javascript. Now, you might have a script to call NPM to load your packages.

Another thing you might want to look at is psake -- it is a powershell-based build system based on ruby's sake. I've heard good things about it though I haven't used it in anger as I can make MSBuild do what I need it to do.

share|improve this answer
    
Well, yeah, What I'm after is the build script that would run MSBuild for compiling for example, and then have the rest build/test steps, instead of setting these all in MSBuild, also, wondering if there is equivalent story in Node. –  Meligy Nov 29 '12 at 1:22
    
Just about every .NET unit test framework I can think either has MSBuild targets or is at least command line friendly and capable of making builds fail for failing tests. For node one could definitely write .NET unit tests to run against a local instance if you need to go that way. Not familiar enough with the internals to recommend anything beyond that. –  Wyatt Barnett Nov 29 '12 at 1:28
    
Node, like most modern browser JS is JIT compiled which is pretty much like interpreted for all intents and purposes. Just a hell of a lot faster. –  Erik Reppen Nov 29 '12 at 4:12

Well for .NET projects typically one uses Team Foundation Server - Build Server setup on the Windows platform.

I want to make sure I understand your questions correctly, but it would help if you also gave your base O/S your developing in too.

share|improve this answer

Not the answer you're looking for? Browse other questions tagged or ask your own question.