2010-07-18 3 views
4

У меня есть следующий Makefile:Как сделать Makefile короче?

all: hello.exe hellogtk.exe hellogtktng.cs 

hello.exe: hello.cs 
gmcs hello.cs 

hellogtk.exe: hellogtk.cs 
gmcs -pkg:gtk-sharp-2.0 hellogtk.cs 

hellogtktng.exe: hellogtktng.cs 
gmcs -pkg:gtk-sharp-2.0 hellogtktng.cs 

clean: 
rm -f *.exe 

Я только начинаю учиться писать Makefiles, и я чувствую, что все это немного повторы. Как могли бы сделать профили Makefile?

ответ

7
all: hello.exe hellogtk.exe hellogtktng.exe 

%.exe: %.cs 
gmcs -pkg:gtk-sharp-2.0 $< 

clean: 
rm -f *.exe 
+1

Вау, спасибо, это работает! Не могли бы вы указать мне документацию об этом? Это выглядит пугающе perl-y. Правильно ли я понимаю, что я бы скомпилировал hello.cs с gtk-sharp-2.0 (который этого не требует)? Могу ли я сделать что-то вроде этого? (это не работает) hello.exe:% .cs gmcs $ < – theone

+0

http://www.delorie.com/gnu/docs/make/make_toc.html –

+0

@theone, более конкретно [ Определение и переопределение шаблонных правил] (http://www.gnu.org/software/make/manual/make.html#Pattern-Rules) раздел –

6

Here's how you can add flags to specific targets.

# An empty variable for flags (Not strictly neccessary, 
# undefined variables expand to an empty string) 
GMCSFLAGS = 

# The first target is made if you don't specify arguments 
all: hello.exe hellogtk.exe hellogtktng.exe 

# Add flags to specific files 
hellogtk.exe hellogtktng.exe: GCMSFLAGS = -pkg:gtk-sharp-2.0 

# A pattern rule to transform .cs to .exe 
# The percent sign is substituted when looking for dependancies 
%.exe:%.cs 
    gmcs $(GMCSFLAGS) $< 
# $() expands a variable, $< is the first dependancy in the list 
+0

Вау, это потрясающе! Он делает то же самое, что и мой оригинальный Makefile! – theone

Смежные вопросы