こんな感じ?

(Makefile)
all: dynamic.c dynamic.h
  gcc dynamic.c
dynamic.h: code.pl
  perl code.pl > dynamic.h

(code.pl)
print <<"CODE";
#include <stdio.h>
int do_dynamic() { return puts(":)"); }
CODE

(dynamic.c)
#include "dynamic.h" /* for do_dynamic() */
int main(int ac, char *av[]) { return do_dynamic(); }