I'm currently working on a project where i am the only developer, but it should be delivered soon to "customers". Since this is actually an application consisting of multiple libraries for physicists laboratories, the boundaries between developers and customers blur or disappear - my colleagues in the labs are familiar with C++, an IDE (usually Visual Studio) and git and need to be able to make modifications to at least parts of the project.

The project itself currently contains an application and a bunch of libraries. Some of the libraries require certain hardware installed and will not compile without it, however the main project (i.e. the application and most other libraries) are independent. The old solution is a single Visual Studio project in a git, where certain preprocessor definitions include or exclude parts of the code and whoever checks out the git, needs to make sure to adapt those definitions to his hardware (ugly....).

My goal is to split the single project into multiple targets that compile more or less independent and if a single target fails to compile it does not affect the other targets (libraries) so they still can be used. The application is independent of most libraries, so thats not a problem. I am also using CMake to be platform/compiler independent and to generate an installer for precompiled binaries.

I would like to have an installer for them to be able to install the libraries and headers in just a few clicks. And if they choose to, also install the source code and the git repo, so they can change the code as needed, compile it, test it "in place" (so e.g. not two different installations, one for usage one for developement) and be able to push the changes to the main repository (or repositories, e.g. one for each library, however thats not necessary).

An additional problem might be, that noone here is really a professional programmer. So while theres always someone around with decent skills to maintain a smaller repository/build system and i am sure i can teach people how to use e.g. CMake, at least the binary installer needs to be usable by people without any programming skills.


How can i easily deliver precompiled binaries with an additional option to "install", modify and recompile the source, including an option to push the changes to the main git(s)?

  • It is operating system specific. Apr 4, 2017 at 7:55
  • Some hardware-dependent libraries are windows-only, but the main programm and the central libraries are platform independent
    – Anedar
    Apr 4, 2017 at 8:13
  • It sounds like it should be designed to enable customers to extend the behaviour. Maybe be creating a plugin architecture with a simple SDK for customers to use.
    – Steve
    Apr 5, 2017 at 10:40

2 Answers 2


I believe it is more a matter of educating your customer than of delivering them some "installer" binary.

I would suggest to document very carefully and well your building procedure.

(BTW, I won't recommend using Cmake; I would suggest instead depending on GNU make and write a good Makefile for it, with detailed instructions on how to edit that Makefile; otherwise, stick to Cmake but do write detailed documentation about how to use it).

You may want to write something for all of Windows, MacOSX, Linux. In some scientific domains you'll have users of all of them.

Details are of course operating system specific. If you believe all your users are only using Windows and Visual Studio you should focus your answer for them.

  • As it stands, the user already indicated that he uses CMake to be platform/compiler independent and you are not giving any compelling reason to switch... Can you clarify why you won't recommend CMake and why GNU make is in your view better?
    – André
    Apr 5, 2017 at 8:25
  • Because CMake is just another layer above GNU make (and mostly because I Basile don't know cmake and don't understand it) Apr 5, 2017 at 11:19
  • CMake is more than "just a layer above make". It can generate Visual Studio projects, can handle "dependencies", find other packages, create packages/installers, etc. I agree with with you that documenting the build process is essential, but the part about CMake makes it appear a bit biased.
    – André
    Apr 5, 2017 at 12:05

Let me suggest an "answer" specific to your user community, based on my experience with that similar community...

...when I was a physics graduate student at CCNY (a >>long<< time ago), about half a dozen faculty had labs with small PDP-lab8e computers continuously collecting data from unattended experimental apparatus. The PDP-8's were all remotely attached (via rs232) to the department's PDP-10, and I wrote assembly language programs (one for the 8's, one for the 10) to query each of the 8's and collect their data.

This required a little site/lab-specific tweaking, and I kind of tried to design and write a general-purpose program for the 8's, with each lab doing their own tweaking, so I could spend less time programming and more time studying. Turned out not to be the best idea: (a)they really didn't want to do any programming in the first place, and (b)trying to explain the necessary stuff and then debug their work took way more time than just doing it myself. So I eventually dropped that original idea and just did it all myself.

So, while your approach reflects an attempt at appropriate cs thinking and design, you might want to step back from that and first think about how much time and effort your user community's likely to be willing to invest. Of course, nowadays people are typically more familiar with programming concepts, even if (your words) "no one here is a professional programmer". But you might still be fighting an uphill battle, in which case handling each case yourself might be best. And, hey, you sure don't want to end up antagonizing anybody who might end up on your thesis committee! :)

So this isn't really a completely "software engineering" (as per this se forum's title) oriented answer, but your particular situation may require a broader scope.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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