2011-06-07 102 views
1

为多种体系结构和配置提供makefile支持的最简单方法是什么?例如,发行版配置可能会使用比调试配置更多的优化。是否应该将变化的选项定义为makefile中的变量,并且需要用户根据需要更新它们?Makefile支持多种体系结构/配置

# Change to -O2 for release. 
COMPILER_OPTIONS := -arch x86_64 -O0 

或者应该在规则中处理这种事情?

*_Release.a: 
    # Recipe for building a release library, i.e., with optimization. 
    # Unsure how to integrate this with different architectures. 

或者两者的结合?

回答

5

架构和配置是一种正交;他们呼吁采取不同的方法。用户应该能够在构建时选择配置,而最简单的方法是使用不同的目标。但我认为在另一个架构上构建一个架构是没有意义的,所以架构的选择应该被自动处理。细节会根据您的需求而有所不同,但您的makefile可能最终看起来像这样:

# Determine whatever we need to know about architecture with "uname" or its 
# equivalent (I think it's "ver" on Windows). 

MACHINE = $(shell "uname -m") 

ifeq ($(MACHINE), i386) 
SOME_VAR = 386 
foo: 
    make a foo the i386 way 
else 
SOME_VAR = something else 
foo: 
    make a foo some other way 
endif 


# Choice of configuration is up to the user 

release: COMPILER_OPTIONS += -O0 
debug: CCFLAGS += -g -Wall 

debug release: 
    whatever... 
0

最简单的方法是不同的目标。大纲:

RELFLAGS := -O2 
DBGFLAGS := -g 

release: 
    $(COMMAND) $(RELFLAGS) $(FILES) 

debug: 
    $(COMMAND) $(DBGFLAGS) $(FILES) 

相同的不同架构,虽然我自己不做任何交叉编译。

+0

因此,每个可能的架构/配置组合的一个目标?这可能会失控。 – Maxpm 2011-06-07 18:32:15

+0

@Maxpm我不知道。你真的做了很多跨体系结构的工作吗?我的csvfix项目(位于http://code.google.com/p/csvfix)可在Windows和Linux上运行,并且在不同的目标上使用相同的makefile。这似乎易于管理。 – 2011-06-07 18:33:38

相关问题