Mesmo que, em retrospecto, os documentos da API estivessem sempre lá, de alguma forma olhar para as entranhas do distutils me levou a uma direção estranha por muito tempo. Dados alguns arquivos de origem, o caso de uso básico real é muito simples:
from distutils.ccompiler import new_compiler
# Create compiler with default options
c = new_compiler()
workdir = "."
# Optionally add include directories etc.
# c.add_include_dir("some/include")
# Compile into .o files
objects = c.compile(["a.c", "b.c"])
# Create static or shared library
c.create_static_lib(objects, "foo", output_dir=workdir)
c.link_shared_lib(objects, "foo", output_dir=workdir)