因此,我在C和C++中有一组不同的库,我需要用一些常见的选项来构建它们。我当前的“模板”makefile看起来如下所示:
#Change this for different MCUs. Standard includes atmega328
VARIANT = ../variants/standard
HDRS=RedBot.h
OBJS=RedBot.o RedBotAccel.o RedBotMotor.o RedBotSensor.o
CPPFLAGS = -I../arduino/ -I./ -DF_CPU=16000000UL -Os -mmcu=atmega328p
CC=avr-gcc
CPP=avr-g++
AR=avr-ar
default: libredbot.a
libredbot.a: ${OBJS}
${AR} crs libredbot.a $(OBJS)
.c.o: ${HDRS}
${CC} -I ${VARIANT} ${CFLAGS} -c $*.c
.cpp.o: ${HDRS}
${CPP} -I ${VARIANT} ${CPPFLAGS} -c $*.cpp
clean:
rm -f ${OBJS} core a.out errs *.a我将makefile与所有源放在同一个文件夹中。然而,这是丑陋的,有几个原因。首先,它只是一个模板。我必须在大约15个库中复制这一点。而且,我需要在所有库中非常容易地更改编译选项,因为多个目标是常见的。目前,我能想到的最好的事情是使用传递给每个库makefile的选项创建一个根makefile。但是,我仍然需要跟踪所有的文件( OBJS位)。并不是所有的图书馆都能建立在所有的目标之上。
有人能告诉我一个更全面的makefile,或者像Rake这样的可以处理这个问题的示例构建文件吗?
发布于 2014-01-21 16:58:04
最后,我用Ruby编写了我自己的一些讨厌的东西,以便轻松地完成这个任务。你可以从这里得到灵感:https://github.com/Earlz/make-wiring/blob/master/build.rb
基本上,它由一个包含许多环境变量的“模板”makefile组成。build.rb脚本只是将它们传递给makefile,而不必手动指定命令行中的所有内容。因此,用法如下所示:
./build.rb build redbot
./build.rb build arduino或者别的什么,所有的标志和参数都整齐地包含在build.rb中,而不是分散在几十个makefile中,或者在命令行上手动指定。
https://stackoverflow.com/questions/20559463
复制相似问题