CPack is the only option of which I am aware that will deliver a (relatively) native experience for each of Windows/Mac/Linux.
Generic Installer - Cross Platform
Perhaps provide a couple of different systems:
CPack for Win32 setup.exe
RPM for Linux
Deb for Linux
DMG for Mac OS X
Then... (because some players cannot have admin rights) provide a .zip for Win32 and a .tar.gz for more exotic Linux distros.
The difficulty with Linux is library versions so make sure to statically compile, or provide a bunch of .o files and provide a script to link them against their current version of libraries the first time they run it.
These 4 setup types can be scripted pretty easily and added to your build pipeline without much trouble. Basically it is pretty much on par with creating an APK for Android, a bit fiddly but once it is done, should keep on working (for a while ;)
My experience has taught me that many Linux / BSD users are able to extract (and often prefer) a simple relocatable .tar.gz file as a method of installation since it doesn't risk conflicting with system files.
CPack for Win32 setup.exe
RPM for Linux
Deb for Linux
DMG for Mac OS X
Then... (because some players cannot have admin rights) provide a .zip for Win32 and a .tar.gz for more exotic Linux distros.
All of these options are covered by CPack. And I'd use CPack with WIX to create a more modern .msi instead of a setup.exe.
hello,
you can do the following for your own custem-made installer:
1. use an archive library like zlib or ziplib to extract those files
2. turn the files into that format which that archive library understands
3. read that file into a char* variable and bind it into header
for this, you must write a software that reads it, and then copies it into a .h file
4. in your custem installer application, use the streams provided by those libraries to extract those files
5. finally, if your installer depend's on registry, (only in windows), you can write those registries by using windows API functions
this is true for configuration files, which you can use OS api functions or another library to do that for you
for INI configuration files, MinINI is available