4 ms·
I think I had the best experience with Meson/Ninja so far. I am also interested in using Nix for building. As for Cargo, I did not like how it recompiled all de
by h_anna_h 5y ago
I think I had the best experience with Meson/Ninja so far. I am also interested in using Nix for building. As for Cargo, I did not like how it recompiled all dependencies when I changed a warning flag on my project. I also found it unusable because it provided no way to check for the hash or signature of the dependencies that it downloads.
I don't think that I have ever been able to successfully compile a project that uses CMake. Its code is horrifying too, for example cmake-3.21.0-rc3/Modules/CheckFunctionExists.c contains
#ifdef CHECK_FUNCTION_EXISTS
# ifdef __cplusplus
extern "C"
# endif
char
CHECK_FUNCTION_EXISTS(void);
# ifdef __CLASSIC_C__
int main()
{
int ac;
char* av[];
# else
int main(int ac, char* av[])
{
# endif
CHECK_FUNCTION_EXISTS();
if (ac > 1000) {
return *av[0];
}
return 0;
}
#else /* CHECK_FUNCTION_EXISTS */
# error "CHECK_FUNCTION_EXISTS has to specify the function"
#endif /* CHECK_FUNCTION_EXISTS */
- yakubin 5y ago> As for Cargo, [...] I also found it unusable because it provided no way to check for the hash or signature of the dependencies that it downloads. Afaik Cargo does it out of the box, based on Cargo.lock. UPDATE: This doc page seems to confirm that: <https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lo...>
- h_anna_h 5y agoI did not know about rev, thanks. Though, since there is no way to specify a signature you are forced to use potentially outdated packages.
- yakubin 5y ago"cargo update" will update the packages along with Cargo.lock content. As for not updating them without a manual trigger, I consider it a feature, but I guess it's a matter of opinion.
- maccard 5y ago> I think I had the best experience with Meson/Ninja so far. cmake lets you use ninja as the backend if that's your cup of tea. You can even set it to the default generator , by setting the CMAKE_GENERATOR environment variable to ninja. (I have no meson experience, so can't compare it). > I don't think that I have ever been able to successfully compile a project that uses CMake. That's quite the statement. In practice, I've found cmake -h. -Bbuild && cmake --build build to work about 90% of the time. Far more luck than I've had with autotools. > Its code is horrifying too, for example: 1) I'm sure I could find some horriffic code in meson too if I went digging. 2) The alternative to this is you having to write something equivalent in your own code, meaning that in my code I don't need to do stuff like [0] in my code to detect features; my build system handles it for me. 3) CMake supports more platforms and targets than I've ever seen in my life, and likely supports more compilers than are necessary. that's a blessing and a curse, but it means that if I write simple program to run on some crufty microcontroller with a bastardised gcc toolchain from the 90s, it's fairly likely that cmake supports it out of the box. Code like that is the price to pay for that level of support. [0] https://github.com/boostorg/beast/blob/b7344b0d501f23f763a76488826dde8c31f34b5d/include/boost/beast/websocket/detail/prng.ipp#L77 https://github.com/boostorg/beast/blob/b7344b0d501f23f763a76...
- h_anna_h 5y agoYou missed the point. "__CLASSIC_C__" is not a thing (why they don't use __STDC__? I don't know, they don't seem to know either) and the syntax that they use inside that ifdef is.. not what people mean by classic C. It has been there for years and multiple people have pointed it out but they do not seem to care. The funny thing is that they do know how to use the pre-standard C argument syntax (as in https://gitlab.kitware.com/cmake/cmake/-/blob/master/Modules/CMakeCCompilerABI.c https://gitlab.kitware.com/cmake/cmake/-/blob/master/Modules...), it's just that they do not want to fix it for that specific file for some reason. As for if (ac > 1000) { return *av[0]; } return 0; I am not really sure what to say. And then for CHECK_FUNCTION_EXISTS();, there are a few rare compilers that do not throw an error at compile-time if said function does not exist. Also, I have been told that cmake-generated Makefiles invoke cmake itself, so you can't really generate portable Makefiles with it. In addition to that, I have been told that cmake takes ages to compile. > meaning that in my code I don't need to do stuff like [0] in my code to detect features I find that much better honestly.
- ris 5y ago> I am also interested in using Nix for building Two reasons to avoid this: - Performance, an item in the store for each object file seems very appealing but would be horrifically slow for anything large. - Ironically, it would make it tricky to build a Nix package for the result, because recursive Nix is not a thing.