0
我想分別使用g ++和mingw編譯我的程序到linux和windows。編譯之間的唯一區別是編譯器使用和輸出文件名。針對多個目標編譯
單個make
命令應產生兩個輸出文件。在makefile中儘可能少地重複實現這一點的最好方法是什麼?
我想分別使用g ++和mingw編譯我的程序到linux和windows。編譯之間的唯一區別是編譯器使用和輸出文件名。針對多個目標編譯
單個make
命令應產生兩個輸出文件。在makefile中儘可能少地重複實現這一點的最好方法是什麼?
如何:
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
我不知道有可能把這樣的兩個目標名稱。不幸的是,它不適用於我,只有linux-name被構建。如果我有需要編譯的依賴目標,我該怎麼辦? – Artium
現在編輯後,我發現我的第一次嘗試沒有工作,因爲我犯了一個錯誤,我在'linux-name'和'windows-name'目標後面放置了'all'目標的定義。然而,你的解決方案仍然存在問題,目標文件只編譯一次,在你的例子中它們只會被編譯爲linux。當make將執行windows-name target時,目標文件已經存在,並且不會重新編譯它們。 – Artium
另外,感謝您向我展示%.o和$ <語法。 – Artium