There is a C++ project. It is supposed to be executed on x86 CPU, target OS are Ubuntu 18.04 and Red Hat 7.4.

There is an idea that there is almost no need to install anything project specific on a build server because all dependancies the project has are stored inside SDK folder. It includes compilers, libraries, required tools and other stuff.

When we want to use additional build server by our team all we need is just to copy or mount SDK folder. For the execution there is no need to copy SDK on target machine as all needed libraries are linked statically. Finally all dependancies of built executable look this way:

ldd my_bin
        linux-vdso.so.1 =>  (0x00007ffcb9f26000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fbe340a8000)
        librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fbe33ea0000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fbe33c9c000)
        libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fbe33916000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fbe335c0000)
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fbe333a9000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fbe32fc9000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fbe342c7000)

From very first point of view everything looks suitable, SDK version (correct folder) is set via configuration scripts. What disturbs me here is that compiler/library update is rather painful.

Such pain is caused by the fact that SDK structure is rather convoluted (a lot of folders with the same names like bin/lib/usr inside different folder included into each other, etc.). As the project is rather old I guess noone understands fully what each directory contains.

I would like to ask you if such idea of having a separate all-in-one SDK should still exists in modern world or there are better and easier maintainable approaches? I started to look into Conan but not sure if it can help with such issues.


I have seen such messes too, and especially C++ and many tools can make a legacy project cumbersome. In a copy tear the project apart in separate modules, small makefiles (without much complexity in them), and documentation of modules: sources & products and the hierarchy. A must: explaining text and a component diagram.

Modularity will help/speed up future development.

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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