2011-06-24 93 views
0

我有以下生成文件:編譯3個可執行文件在一個makefile文件

prog1: prog1.c 

     gcc -o prog1.exe prog1.c 

prog2: prog2.c 

     gcc -o prog2.exe prog2.c 

prog3: prog3.c 

     gcc -o prog3.exe prog3.c 

這是一個demo目錄演示文件,我想在一個makefile編譯。

我該如何使用模式來縮短這個?

例如在這個方向:

progs= prog1 prog2 prog3 

    all: ($progs) 

%.exe: %.c 

     gcc ..... 

回答

1

像這樣的東西應該工作:

%.exe: %.c 
    gcc $< -o [email protected] 
+0

知道如何做到這一點,它的內置規則可以理解額外的編譯器和鏈接器參數,以及必要的庫(如果指定的話)。 – Novelocrat

+0

@Novelocrat:當然可以,但是OP特別詢問如何使用模式來縮短他的解決方案。 – eriktous

+0

縮短這個的方法是使用Make的內置模式。 – Novelocrat

3

製作知道如何建立從源文件的可執行文件。你應該能夠編寫整個makefile文件作爲

progs := prog1 prog2 prog3 
all: $(progs) 

如果需要指定要使用的C編譯器,只要加一行讀

CC := gcc 

如果你需要通過你的編譯器的其他標誌,把它們放在CFLAGS變量中。

編輯:爲了滿足慾望名爲foo.exe文件,你可以移動它,它的建成後:

%.exe: % 
      mv $< [email protected] 

或者,如果你知道你正在使用的GNU工具鏈,你可以告訴鏈接給你前綴:

LDFLAGS := --force-exe-suffix 

不幸的是,GNU似乎並作出不予提供一個標準的變量「後綴/擴展上生成的可執行文件」

+0

+1,但注意到Georg的makefile實際上產生了例如'prog1.exe',而不是'prog1'。 – Beta

+0

好的,所以讀取規則 %.exe:% mv $ <$ @ @ 將是合適的迴應,而不必查看Make文檔。我敢打賭,有一個內置變量可以設置爲'可執行後綴'。 – Novelocrat

0

非常感謝您的留言!我發現我必須添加一條規則才能使其工作。此外,我添加了觸摸功能,可以重複makefile。

progs = prog1 prog2 prog3 

all: run_touch $(progs) 

run_touch: 

    touch *.cpp 

%:%.cpp 

    $(CC) $(CFLAGS) -o [email protected] $< $(LDFLAGS)