Phil CK

How I Use Premake

Last updated on

Build systems are the bain of C and C++ developers, but I find those same developers look down on build systems, and are how these systems are maintained is usually to a lesser quality than the main code.

To quote Roy

“i’ve seen things you people wouldn’t believe”.

I quite like Premake, I wish it had more generators, but I like it. However most people write Lua code like shit (because they just dont care), and very quickly you end up with some sorta hell-scape.

This is the way I do my personal projects with Premake.

Describe the exe/lib as data.

{
        "projects" : [
                {
                        "name" : "lib_name",
                        "kind" : "StaticLib",
                        "language" : "C",

                        "files" : [
                                "foo.h",
                                "foo.c"
                        ],

                        "include_dirs" : [
                                "./"
                        ]
                }
        ]
}

Premake provides a json decode function that turns the json into a Lua table. So we can collect all the json files, decode them and process them.

local project_files = os.matchfiles("./**premake.json")

for i, file in ipairs(project_files) do

    local json_str = io.readfile(file)
    local file_table, err = json.decode(json_str)

    -- Call Premake API --
end

My full impl can be found here my solution isn’t meant to be a generic one size fits all solution. Its meant to service my narrow needs.