2012-10-29 73 views
0

我想分別使用g ++和mingw編譯我的程序到linux和windows。編譯之間的唯一區別是編譯器使用和輸出文件名。針對多個目標編譯

單個make命令應產生兩個輸出文件。在makefile中儘可能少地重複實現這一點的最好方法是什麼?

回答

2

如何:

linux-name: CC:=g++ 
windows-name: CC:=mingw 

linux-name windows-name: 
    $(CC) whatever -o [email protected] 

編輯:

我上面寫的只是 makefile中的一部分;我認爲其餘的makefile是隱含的。更加明確:

all: linux-name windows-name 

linux-name: CC:=g++ 
windows-name: CC:=mingw 

linux-name windows-name: foo.o bar.o baz.o SomethingElse 
    $(CC) $(CCFLAGS) whatever $^ -o [email protected] 

%.o: %.cc 
    $(CC) $(CFLAGS) -I$(INC_DIR) whatever -c $< -o [email protected] 

SomethingElse: 
    build somehow 
+0

我不知道有可能把這樣的兩個目標名稱。不幸的是,它不適用於我,只有linux-name被構建。如果我有需要編譯的依賴目標,我該怎麼辦? – Artium

+0

現在編輯後,我發現我的第一次嘗試沒有工作,因爲我犯了一個錯誤,我在'linux-name'和'windows-name'目標後面放置了'all'目標的定義。然而,你的解決方案仍然存在問題,目標文件只編譯一次,在你的例子中它們只會被編譯爲linux。當make將執行windows-name target時,目標文件已經存在,並且不會重新編譯它們。 – Artium

+0

另外,感謝您向我展示%.o和$ <語法。 – Artium

相關問題