bfcat - encode a file as a brainf*** program
Brainfuck, 55 51 bytes

,[&gt;+++[&gt;+++++++&lt;-]&gt;[&lt;++&gt;&gt;+++&lt;-]&lt;+&lt;[&gt;.&lt;-]&gt;+++.&gt;&gt;-.,]


Try it online!

Example output for hi (without the linefeeds):

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++.&gt;++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.&gt;


Explanation

This moves across the tape while writing the program. The surrounding ,[...,] is a standard input loop. For each character, we use four cells:

[... x a b c ...]


where x is the cell we write the input to.

&gt;+++[&gt;+++++++&lt;-]


This part uses cell a to write a 21 into cell b via a standard multiplication of 3 and 7.

&gt;[&lt;++&gt;&gt;+++&lt;-]


Now we use that 21 to write 42 into a and 63 into c by multiplying by 2 and 3 respectively. Then &lt;+&lt; moves back to cell x while turning the 42 into a 43 (the code point of +). Recap:

[... x 43 21 63 ...]


Now the main output loop:

[&gt;.&lt;-]


That is, while decrementing x we print one + each time.

&gt;+++.


After we're done we reuse the + cell, by adding 3 to give ..

&gt;&gt;-.


Finally, we move to the 63, decrement it to 62 (&gt;) and output that as well. The next iteration will use this cell as x.