import type ; import generators ; import os ; import print ; type.register FOO : foo ; generators.register-standard foo.foo : FOO : CPP H ; rule foo ( targets * : sources * : properties * ) { # On NT, you need an exported symbol in order to have an import lib generated if [ os.name ] = NT && LIB in $(properties) { .decl = "echo void __declspec(dllexport) foo(){}" ; } if [ modules.peek : OS ] in CYGWIN && LIB in $(properties) && $toolset != gcc { .decl = "echo 'void __declspec(dllexport) foo(){}'" ; } .decl1 on $(<) = $(.decl:E="echo //") ; # Further files must be touched also; NT doesn't have a touch command local i = [ print.echo-cmd "#include " ] ; .decl2 on $(<) = " $(i) > " ; } actions foo { $(.decl1) > $(<[1]) $(.decl2)$(<[2-]) }