I would strongly advocate against compiling everything statically if your program ever gets packaged by distributions , this will annoy packagers . You should use a buildsystem , and it probably should be cmake this is not entirely decoupled from distribution , because in cmake you can specify dependencies and emit semi useful error messages for missing dependencies . On linux especially it ' s not a good idea to package your own curl , ncurses and boost stuff unless you need patched versions which will be available via the system . Personally I think it ' s also a bad idea to just drop a . deb and assume it ' ll be fine for all linux users . For windows , you should also consider e . g . a nuget package , to pull in binary dependencies .