unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
From: Kevin Rodgers <ihs_4664@yahoo.com>
Subject: Re: Wait for compile to finish
Date: Thu, 20 Oct 2005 10:31:42 -0600	[thread overview]
Message-ID: <dj8gpi$mlm$1@sea.gmane.org> (raw)
In-Reply-To: <Hw8DDpgmJd$s@ludens>

Toto wrote:
 > I would like to have a function, which runs the program, that belongs to
 > the buffer i'm editing or compile it first if it isn't done already.
 > To make it more clear. Say, i'm editing helloworld.c and i call this
 > function, it should execute helloworld.exe (yes, i'm on windows). If
 > there is no hello.exe in the current directory (or it is older than the
 > source file) emacs should compile it first and run it afterwards.
 >
 > For this purpose I have come up with a funcion similar to the one below.
 >
 > But: Compile is asynchronous, so this funcion tries to execute the exe
 > file before the compilation finishes (and the exe is created).
 >
 > My question is:
 > Is there a synchronous version of compile? Or how can i determine that
 > compile has finished (and get the result of the compilation - success
 > or failure)?
 >
 > The (pseudo) code is as follows:
 >
 > (defun run-compiled-program (params)
 >   "Runs the program with the same name as the buffer."
 >   (interactive "sRun with parameter(s): ")
 >   (setq exe (concat
 > 			 (file-name-sans-extension (buffer-file-name))
 > 			 ".exe"
 > 			 )
 > 		)
 >      (if (not (file-newer-than-file-p exe (buffer-file-name)))
 >  	 (compile-this-buffer) ;; using the compile funcion
 >  	  )
 >   (shell-command
 >    (concat exe " " params)
 >    )
 >   )
 > ;; GNU Emacs 22.0.50.1 (i386-mingw-nt5.1.2600) of 2005-03-08 on S8472

Use the make utility to compile your program before you run it:

(defun run-buffer-program (&optional args)
   "Compile the visited file into a program and run it with command line 
ARGS."
   (interactive "sArgs: ")
   (let ((program (file-name-sans-extension
                   (file-name-nondirectory buffer-file-name))))
     ;; What is the list of systems that require the .exe extension?
     (when (memq system-type '(dos))
       (setq program (concat program ".exe")))
     (shell-command (format "make %s && ./%s %s" program program args))))

-- 
Kevin Rodgers

  reply	other threads:[~2005-10-20 16:31 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-10-20 13:07 Wait for compile to finish Toto
2005-10-20 16:31 ` Kevin Rodgers [this message]
2005-10-20 19:40   ` Eli Zaretskii
2005-10-21 15:43 ` William Xu
2005-10-21 21:18 ` Kevin Ryde
2005-10-22 16:07 ` Vagn Johansen
2005-10-24 10:22   ` Toto

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='dj8gpi$mlm$1@sea.gmane.org' \
    --to=ihs_4664@yahoo.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).