![]() One common action in GBA projects is to bundle game assets in a GBFS archive and append it to the end of your game. Here’s a complaint that isn’t tool related: There are CMake features that are still half-finished. This really sucks, as I struggle to document and communicate to developers what is available. In most IDEs I can Ctrl click on something and be taken to its definition, but IDEs seem to not implement this for CMake.ĬMake has support for Doxygen, but Doxygen doesn’t support producing documentation for build systems. I have all these cool APIs that people can’t discover because no IDE has auto complete for CMake. I like auto fill suggestions popping up as I type stuff. I think my CMake complaints would surprise people, as none of them are related to the language. I think it looks cool, especially if you come from seeing traditional CMake projects which are a wall of set() commands with mysterious variable names. PAD 256 # Pad the binary to a multiple of 256 bytesįIX_HEADER # Apply the header checksum that makes the ROM work on hardwareĪRCHIVE_DOTCODE # Generate eReader dot-codes (lol) ![]() Part of the build process involves running objcopy to copy up all the binary in an ELF file into a final GBA ROM binary. I realised that I could provide GBA specific options to developers making GBA homebrew right there in the build system. I think everything changed when I first saw a self-configuring project on the Game Boy Advance, it wasn’t written in CMake, but I liked what it was doing and wanted to figure out a way to get a self-configuring toolchain going and available with familiar IDEs.ĬMake is available with familiar IDEs (Meson, is not) so the choice was obvious. That was my CMake experience for a long, long time. I could barely figure out how to add header include directories. I had no idea what I was doing, I had to Google and copy-paste snippets to get anything done. My first introduction to CMake was Android. The style of old CMake is a bit shouty with EVERYTHING BEING UPPER CASE. I wish the official documentation had some kind of recommendation. I had to make up my own coding style for CMake. I’ve seen some crusty, old CMake that uses the closing keywords to add some documentation, but it doesn’t actually do anything, so now we’re all left with parenthesis after every key word. This is quite convenient, lets me write some pretty neat CMake APIs.Įverything ends in the call parens (). There’s some legacy nonsense, like when do I $ ) # ARGS_VERBOSE, ARGS_OPTIMIZE, ARGS_INPUTS Having to write endif() and endfunction() is weird.Ĭlearly it was written to be simple to parse, and I guess because of that it is accidentally okay to visually parse. ![]() I don’t like the syntax, it’s really goofy. The new versions tend to add stuff that I find quite useful. I like that CMake is actually updated and actively worked on. Plus Meson has a Python requirement and that puts me off immediately. CMake honestly does the job, and Meson to me looks like a project born out of frustration that no-one is willing to talk about CMake’s weird as heck syntax. There’s some people out there who think we should all migrate to Meson, but I simply don’t see a need. There’s a reason it’s ubiquitous in the C++ ecosystem. I don’t think enough people defend CMake. I found a draft of an article I started writing on Medium titled “Enjoying CMake”. Where the feck are examples of GOOD CMake projects?.Parsing function arguments is kind of cool.Putting it together, we have $:Release>.« - New Website Home - That one time I made a Minecraft mod » This will evaluate to a 1 if the current config is Debug, and to a 0 otherwise. Notice that the step being added is called "BuildOtherConfig," so this inverted logic makes sense. If the current configuration's Release, it will evaluate to Debug. So, if the current configuration is Debug, the whole expression will evaluate to Release. ![]() The one you have there means roughly this (pseudo-code): if current_configuration = "Debug" In short, it's a piece of text which CMake will evaluate at generate time (when it's done parsing all CMakeLists and is generating the buildsystem) it can evaluate to a different value for each configuration. You can follow the link for a full discussion of what these are and what they can do. ![]()
0 Comments
Leave a Reply. |
AuthorWrite something about yourself. No need to be fancy, just an overview. ArchivesCategories |