When I run M-x compile
it spawns a new subshell to execute my compile command. As soon as the compile command returns, the shell process is killed. I can see why this would be desirable in most cases, but I am currently in a situation where it is not helpful.
I am working in a specialized build environment right now which requires that I take some initial steps to setup the build before running the compiler. As long as the environment persists,I only need to do the setup steps once. But when I use M-x compile
it means that I have to do the steps each time I want to compile or recompile.
Is there a way that I can spawn a subshell that will persist in the background? One that M-x compile
and M-x gdb
can use each time they need to run a shell process?
Motivation:
I have a program (which we will call xcc
) which builds C code for special platforms. In order to build my code, I first start xcc
from the tcsh
prompt:
$ xcc
The program takes 10+ seconds to load, and then I can enter commands at its interactive prompt
xcc>> add target myprogram
xcc>> set source myprogram $PROJDIR/src/
xcc>> set includes myprogram $PROJDIR/include/
xcc>> set type myprogram primitive
xcc>> set inputs myprogram int8,int8
xcc>> set outputs myprogram fix16,fix16
xcc>> build myprogram
The above steps can be built into a custom macro buildmyprog.macro
so that I can run it directly from the shell, or from emacs with M-x compile
$ xcc buildmyprog.macro
The main problem with this approach is the fact that it takes the xcc
program 10 seconds to load, before compilation even begins. I got tired enough of waiting the extra 10 seconds every time I compiled that I have started running xcc
in an ansi-term
in a separate buffer. Now after I modify and save the code, I switch over to the ansi-term
buffer and run
xcc>> build myprogram
This works fine, but every time I switch over to that buffer I think, "Wouldn't it be great if I could just push F7
and my compile command would get sent to the already-running instance of xcc
?"