On the importance of tabs in Makefile

So this is part 2 in “Adventures of a novice plugin developer” - probably old news to most people here but I thought it worth sharing in case anyone else ends up banging their head against the same issue, especially like me who are new to compiling and makefiles!

I made my first “hello world” plugin by copying eg-amp-lv2-labs and tweaking it into a nice little waveshaper. Gave the folders and files new names, changed the *.ttl, makefiles, etc. to use the new names, ran ./build moddwarf varidrive and…

/home/ben/mod-workdir/moddwarf/host/usr/bin/aarch64-mod-linux-gnu-gcc -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64  -O3  -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Wl,-O1 -Wl,--as-needed -Wl,--strip-all  varidrive.c varidrive.lv2/varidrive.so varidrive.lv2/manifest.ttl   -o varidrive
varidrive.lv2/manifest.ttl: file not recognized: File format not recognized

Cue lots of checking for typos, reading up about Makefiles and trying lots of different variation of Makefile, eventually the lightbulb moment comes - make seems to be running the first two plugin build rules together and ends up trying to push varidrive.so and manifest.ttl into the compiler along with varidrive.c

The solution: add a line after the first build rule containing a single tab character and nothing else (i.e. a blank action line). This tellls make that the dependency line is over, and that it shouldn’t do anything about it (such as trying to compile files that aren’t source code!)

I’ve also written this up in https://github.com/moddevices/mod-plugin-builder/issues/124 (in a much clearer way).

:face_with_symbols_over_mouth::face_with_symbols_over_mouth::face_with_symbols_over_mouth::face_with_symbols_over_mouth: to meaningful whitespace!

5 Likes