3 ms·
CMake is actually a perfect demonstration of how annoying C++ development tooling can be. The documentation is massively verbose but doesn’t really say anythin
by wredue 3y ago
CMake is actually a perfect demonstration of how annoying C++ development tooling can be.
The documentation is massively verbose but doesn’t really say anything helpful. There’s basically no “Modern CMake” examples that anyone can agree upon. (I do see that there’s some GitHub repos these days that maybe do show some of it). There’s very little information on “The CMake way of doing things”. You really need to learn by examination, and your assumptions in the end will very likely be wrong.
Even just adding a package fetch in CMake is infuriating. What is the currently accepted way to do this? (I admit that I haven’t used CMake in a while, but as of a year ago, the internet and CMake docs did not agree on the correct way, even internally)
- FpUser 3y agoWe must be living in a different world. It literally takes me seconds to create new executable project. >"Even just adding a package fetch in CMake is infuriating." I am not sure how to do it because I do not let build process / environment fetch things from the Internet. I always download / deploy / update manually upon real need. I would agree that having IDE do it for you is convenient but since I only use very few libs there is no need for me to do it at all. If I need to create new project I just copy a template, fire up CLion IDE and it all takes few seconds from the - I am going to do it, to start actual coding.
- maleldil 3y agoUsing external libraries is important because it lets you focus on what's important for your project. C++'s lack of a proper package manager means we're all reinventing the wheel because adding dependencies is non-trivial. Cargo/Rust and Go show how compiled languages can have drastically superior development experiences. CMake is primitive in comparison. Its only upside is its flexibility, which I reckon isn't worth it for most cases.
- zigzag312 3y agoA while back I needed to write a small library in C++. It took me about the same amount of time to write few dozen lines of CMake (to get build working with all the external libraries), as it took me to write few thousands lines of C++. I wasted way too much time dealing with CMake.
- FpUser 3y ago>"few dozen lines of CMake (to get build working with all the external libraries), as it took me to write few thousands lines of C++." I claim BS unless those "thousands lines" were cut'n paste.
- zigzag312 3y agoNo, but it was a rewrite of C# code. Using MSVC compiler, targeting Windows and Linux. C++20 with modules. External libraries: libsodium, lmdb, roaring & rocksdb. First time using CMake.
- FpUser 3y ago>"Using external libraries is important because it lets you focus on what's important for your project" Well thank you. I just trying to guess where did you get the idea that I am not using 3rd party libs. >"C++'s lack of a proper package manager means we're all reinventing the wheel because adding dependencies is non-trivial." I think it is trivial. Here is particular example for cpp-http library that I use in some of my projects: a) download from github b) add add_subdirectory("./3rd-party/cpp-httplib") into CMakeLists.txt file That is it. Ready for use.
- wredue 3y agoThat’s fine, but most modern tooling “automates” this for you and gives you easy tooling to manage versions as well. Additionally, you get a nice list in a simple spot of exactly what you need that isn’t just documentation. Anyone can easily pull your project and contribute. Being able to easily manage deps has issues (such as a tendency to trend toward left-pad), but there’s also significant benefits as well that become readily apparent when you compare cargo with CMake (I understand they’re not completely comparable)
- martsa1 3y agoThe Professional Cmake book is an indispensable, fantastic resource I've used on a couple of work projects, I highly recommend it to anyone working with Cmake. That being said, Cmake is a far cry from the ease of use of cargo (albeit with potentially much more flexibility). https://crascit.com/professional-cmake/ https://crascit.com/professional-cmake/