我有一個makefile
,它對於Linux(x86_64
)和OS X Intel(x86_64
)透明地工作。這使用64位特定的GCC選項。如何爲32位和64位創建單個生成文件?
是否有辦法調整makefile,以便我可以構建32位和64位OS X PPC(ppc
,ppc64
),而無需維護獨立的,特定於arch的makefile - 可能類似於pre-處理器指令可以在構建之前確定架構?
我有一個makefile
,它對於Linux(x86_64
)和OS X Intel(x86_64
)透明地工作。這使用64位特定的GCC選項。如何爲32位和64位創建單個生成文件?
是否有辦法調整makefile,以便我可以構建32位和64位OS X PPC(ppc
,ppc64
),而無需維護獨立的,特定於arch的makefile - 可能類似於pre-處理器指令可以在構建之前確定架構?
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 ...
我認爲你可以通過採用某種構建系統(如cmake或GNU autotools),以較少的工作(和痛苦)實現目標。
我會說,如果你的項目很小,並且你沒有很多的庫依賴性來處理不同的平臺,那麼就要遠離自動工具,因爲它的地獄要維護。如果它是一個小型(ish)項目,並且您對這些tragets會是什麼樣子有所瞭解,那麼對於一些經過調整的makefile,您就可以完成。 – gilligan 2010-11-04 13:12:16
我會說,即使你的項目很小,隨着自動工具。它比CMake和現代automake好得多,使用'AM_SILENT_RULES'看起來幾乎一樣好。地獄保持?不是真的。 – 2010-11-04 22:45:07
那麼,計算機程序的可用性一直是觀察者眼中的:-)還有另一種選擇,它具有相當溫和的學習曲線:來自Trolltech的tmake。不支持,但有效。比替代品簡單得多。 – ssegvic 2010-11-05 17:21:11
嘗試文件包含。這不是標準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)
。
我使用這種方法的代碼庫必須建立在5個不同的Unix變體上 – Spaceghost 2011-01-11 03:19:21
這非常有用。有許多不同的標準,相對較少的操作系統似乎完全符合每個標準......您是否必須閱讀每個目標操作系統的標準和合規性信息,或者是否有更簡單的方法來找出哪些系統支持每個功能?對於自動生成依賴關係,我做得很好,但這取決於'include',我認爲這得到了普遍支持。 – 2016-07-21 00:23:18
的一種方式是:
posix
,win32
,win32-gcc
等我已經在中小型項目中使用過這個(2或3個人在代碼上工作了幾年),它很適合這個法案。
只需添加:某些項目中的'。/ configure'步驟,可以做類似的事情。 – anishsane 2014-08-27 07:14:52
-1,沒有回答這個問題(如何區分pcc到x86) – u0b34a0f6ae 2013-01-07 20:38:29
如果有人知道如何在沒有MSYS的MinGW(Windows)下執行此操作,請在此處添加評論並標記我。 – 2015-07-04 19:02:55