2010-11-04 103 views
18

我有一個makefile,它對於Linux(x86_64)和OS X Intel(x86_64)透明地工作。這使用64位特定的GCC選項。如何爲32位和64位創建單個生成文件?

是否有辦法調整makefile,以便我可以構建32位和64位OS X PPC(ppcppc64),而無需維護獨立的,特定於arch的makefile - 可能類似於pre-處理器指令可以在構建之前確定架構?

回答

20
ARCH := $(shell getconf LONG_BIT) 

CPP_FLAGS_32 := -D32_BIT ... Some 32 specific compiler flags ... 
CPP_FLAGS_64 := -D64_BIT 

CPP_FLAGS := $(CPP_FLAGS_$(ARCH)) ... all the other flags ... 
+5

-1,沒有回答這個問題(如何區分pcc到x86) – u0b34a0f6ae 2013-01-07 20:38:29

+0

如果有人知道如何在沒有MSYS的MinGW(Windows)下執行此操作,請在此處添加評論並標記我。 – 2015-07-04 19:02:55

1

我認爲你可以通過採用某種構建系統(如cmake或GNU autotools),以較少的工作(和痛苦)實現目標。

+2

我會說,如果你的項目很小,並且你沒有很多的庫依賴性來處理不同的平臺,那麼就要遠離自動工具,因爲它的地獄要維護。如果它是一個小型(ish)項目,並且您對這些tragets會是什麼樣子有所瞭解,那麼對於一些經過調整的makefile,您就可以完成。 – gilligan 2010-11-04 13:12:16

+1

我會說,即使你的項目很小,隨着自動工具。它比CMake和現代automake好得多,使用'AM_SILENT_RULES'看起來幾乎一樣好。地獄保持?不是真的。 – 2010-11-04 22:45:07

+1

那麼,計算機程序的可用性一直是觀察者眼中的:-)還有另一種選擇,它具有相當溫和的學習曲線:來自Trolltech的tmake。不支持,但有效。比替代品簡單得多。 – ssegvic 2010-11-05 17:21:11

2

嘗試文件包含。這不是標準Makefile語法(Single Unix v3規範中的一種)的一部分,但得到廣泛支持。隨着GNU做,這看起來是這樣的:

include otherfile 

有了這個,你可以有這樣一個x86的Makefile:

ARCHFLAGS = -m64 -mtune=core2 
include common.mk 

和PowerPC的Makefile文件:

ARCHFLAGS = -mcpu=g3 
include common.mk 

和大頭的編譯規則將在一個文件中(common.mk),必要時使用$(ARCHFLAGS)

+0

我使用這種方法的代碼庫必須建立在5個不同的Unix變體上 – Spaceghost 2011-01-11 03:19:21

+0

這非常有用。有許多不同的標準,相對較少的操作系統似乎完全符合每個標準......您是否必須閱讀每個目標操作系統的標準和合規性信息,或者是否有更簡單的方法來找出哪些系統支持每個功能?對於自動生成依賴關係,我做得很好,但這取決於'include',我認爲這得到了普遍支持。 – 2016-07-21 00:23:18

1

的一種方式是:

  • 具有生成文件片段對每個體系結構(可能累積):posixwin32win32-gcc
  • 有運行並確定爲什麼片段是一個腳本適合主機
  • 將那些makefile碎片包含到主makefile中
  • 允許使用環境變量進行手動覆蓋(因爲事情有時可能很複雜;例如,想一想交叉編譯器)

我已經在中小型項目中使用過這個(2或3個人在代碼上工作了幾年),它很適合這個法案。

+0

只需添加:某些項目中的'。/ configure'步驟,可以做類似的事情。 – anishsane 2014-08-27 07:14:52