On Tue, 25 Mar 2008 21:42:20 -0700 Mike Mattie wrote: > On Wed, 26 Mar 2008 06:19:17 +0200 > Eli Zaretskii wrote: > > > > From: "Balaji V. Iyer" > > > Date: Tue, 25 Mar 2008 09:09:56 -0400 > > > > > > I use the compile option extenstively in emacs. When I type > > > "M-x compile" the default line is "make -k" Many times I do not > > > have a make file > > > > You don't need a Makefile to perform simple tasks, because Make > > knows a lot of built in rules out of the box. For example, to > > compile a .c source file foo.c into a program foo, all you need is > > say "make -k foo", and Make will do it even without a Makefile. > > > > > thus I would lke the default line to be > > > > > > "gcc -ansi -O4 -Wall " > > > > > > How do I do this? > > > > Customize the variable compile-command. > > > > > I tried the following command but it doesn't seem to work (If > > > anyone have a better idea please let me know). > > > > > > (function > > > (lambda () > > > (unless (or (file-exists-p "makefile") > > > (file-exists-p "Makefile")) > > > (setq compile-command > > > (concat "gcc -Wall -O3 -o" > > > (file-name-sans-extension > > > (file-name-nondirectory buffer-file -name)) > > > " " > > > (file-name-nondirectory buffer-file-name)))))) > > > > Where did you put this and how did you use it? > > > > > > (defun string-join (prefix list) > ;; This is analogous to the perl5 join function. > ;; given a and a of strings join the > ;; strings with as a seperator between the > ;; list values. > ;; > ;; The result is a single string value. > (apply 'concat > (car list) > (if (cdr list) (prefix-strings prefix (cdr list))) )) > > > (setq my-warnings '("-Wall")) > (setq my-optimization '("-O2")) > > (defun create-compile-command ( target source ) > (string-join " " (cons > (or (getenv "CC") "gcc") > (append my-warnings my-optimization (list "-o" > target source))))) > > (create-compile-command "foo" "foo.c") > > (defun my-compile () > (interactive) > (lexical-let* > ((source (file-name-nondirectory buffer-file-name)) > (target (file-name-sans-extension source))) > > (if (file-readable-p (concat (file-name-directory > buffer-file-name) "Makefile")) (compile) > (let > (compile-command (create-compile-command)) > (compile))) )) > > I haven't used compile in a while, but this is a sketch of how I > would approach it. Hope it helps. as cute as elisp is why not create a generic Makefile, and supply a -f argument ? > Cheers, > Mike Mattie