2010-08-17 197 views
0

我使用GNU Make来构建一个多目录项目。 我的问题是如何使用单一的生成文件来构建多个设备? 例如我的应用程序必须在各种X,Y,Z移动设备上运行,每个移动设备具有不同的属性,如屏幕大小,键盘类型,平台版本等。我必须通过make -f <makefilename> <targetname>。这里的目标名称可以是设备名称和型号,如三星CorbyPlus,但我的生成文件必须转到三星的特定dirname并打开.txt文件或所有上述属性定义的位置。我必须在构建时读取所有这些文件,并通过一些宏/定义/标记访问我的代码。如何从Makefile读取文件?

任何人都可以建议如何做到这一点?更好的解决方案,我的要求将不胜感激。

回答

1

我建议使用配置makefile。例如,假设有与它的配置几个装置:

config_device1.mk

OPTION1=yes 
OPTION2=0 

config_device2.mk

OPTION1=no 
OPTION2=1 

然后,可以有条件地使用包括它们变成碱生成文件从命令行传递的特殊参数(make -f makefile DEVICE = dev_type1)并使用opt从配置文件中的离子和处理它们:

的makefile

ifeq ($(DEVICE),dev_type1) 
include $(CONFIG_PATH)/config_device1.mk 
endif 

ifeq ($(DEVICE),dev_type2) 
include $(CONFIG_PATH)/config_device1.mk 
endif 

ifeq ($(OPTION1),yes) 
CFLAGS += -DBUILD_OPTION1  
endif 

CFLAGS += -DBUILD_OPTION2=$(OPTION2) 

BTW,长期角度看(如果你没有时间的限制,现在),最好使用一些已有的构建系统中,阅读其手册并坚持其方法论。

+0

没有'ifeq'函数,可以使用命名约定:例如'include $(CONFIG_PATH)/ config _ $(DEVICE).mk'。 – 2010-08-17 06:46:04

+0

谢谢。对,这只是一个例子,全部取决于特定的构建环境,架构,项目中使用的约定(应由所有参与者开发和遵循) – pmod 2010-08-17 07:50:12

+0

任何人都可以告诉我如何携带已分配的宏/变量/标志的值在makefile中我的代码? 例如在上面的代码片段中,如果我分配SCREENSIZE = 17X220,并且想要在代码中使用此SCREENSIZE宏值,我该怎么做? 因为其他的0/1,所以只能通过#ifdef或#ifndef等代码检查true/false值。 – Aahna 2010-08-30 06:02:16