Open hinell opened 1 year ago
You could say the project is dead - I wrote this as a student and haven’t used cmake a lot since working. I am sorry for not supporting it more. Personally I think there should be a standard build system for c++ and like it or not it has been cmake . But due to cmake being very lacking partially I developed this project . The idea for me was that cmake is a root dependency you could use a vanilla machine to install everything you need , from compiler of any language to 3rd party packages for compilation. Everything could bootstrap itself and this project supported some of these ideas. Anyway no more rants from me - and use this project if you find it useful:)
I am sorry for not supporting it more
Nothing to be sorry about. You made a great job we all appreciate. If it's ever used in any commercial project you should get rewarded.
Personally I think there should be a standard build system for c++
Same here. I think CMake scripting isn't perfect, but that's what we have. I think in future it would be best if it's split into a frontend and a backend so front-end scripting language can be easily switched and upgraded.
I learned recently, that CMake was builtin with simplicity in mind, so it doesn't use any sophisticated grammar parsing tools like Bison. Basically, it just evaluates commands.
If you are interested in how cmake works, see this link: https://aosabook.org/en/v1/cmake.html#footnote-1
Btw. If you don't maintain this project often, you can make a notices at the top of REDME.md so users will quickly get idead whether to use it or not. Thanks!
I learned recently, that CMake was builtin with simplicity in mind, so it doesn't use any sophisticated grammar parsing tools like Bison. Basically, it just evaluates commands.
CMake does not have has builtin containers like lists, dictionaries, maps and so on. For example, the List container is not really a builtin and just based up on the existing set of commands like set
which sets a single string value not multiple. Plus multiple issues, like around ;
-character discarding and escaping, and so on.
For example:
;-escape list implicit unescaping
: https://gitlab.kitware.com/cmake/cmake/issues/18946string escape sequence depends on macro call nesting level : "\\\${a}" -> "\\\\\\\${a}" -> "\\\\\\\\\\\\\\\${a}"
: https://gitlab.kitware.com/cmake/cmake/issues/19281Not paired ] or [ characters breaks "file(STRINGS"
: https://gitlab.kitware.com/cmake/cmake/issues/19156These issues just a minor example of how is hard to build a simple parser on the cmake language. So they just decided to push out the not minimizable complexity out of the language which brought another complexity in. This rather bad than good.
Or another example with incompleteness, when 3dparty libraries trying to change shared variables like CMAKE_BUILD_TYPE
and breaks the entire build:
Or no ability to check whether a library or component support the multiconfig (CMAKE_BUILD_TYPE
must not be used) or single config (CMAKE_BUILD_TYPE
must be used), because cmake projects with the multiconfig must call only to projects with the multiconfig.
Or system functions hooking is another way of incompleteness in cmake.
I've built my own library up on that and know that I am talking about: https://github.com/andry81/tacklelib/tree/HEAD/cmake/tacklelib/
@andry81 I wasn't talking about creating a parser by using CMake language. I was talking about implementation of a "parser" written in C++ that cmake uses to parse its CMakeListst.txt
. Cmake doesn't use parser-generators cause it was striving for simplicity since day 0 of its creation. That's the reason its language is so primitive by modern standards.
Anyone?
Tonnes of efforts were put into this project. Wouldn't it be much better to implement a frontend to the cmake and create better scripting language like meson, but which is much faster?