1 make
我使用微芯片微控制器已经有一段时间了,而且我非常不喜欢 Netbeans。因此,自从 Mplab 迁移到 Netbeans 后,我尝试自己完成所有工作,以下是所需的帮助:
我想编译.c
项目文件夹中的所有文件并制作每个文件的目标文件.c
。最后一条命令是所有文件的链接object
。
我粘贴了我的 makefile 之一。问题是,我必须对每个项目执行此操作,并且我试图使其自动执行,而无需.c
在 makefile 中写入任何文件名。我尝试使用wildcard
,但编译时出现错误。当我有多个目标文件时,为我生成一个目标文件。
如果有人可以帮助我,我将非常感激。
这是我的 makefile 之一:
CFLAGS = -c -MP -MMD -g -omf=elf -DXPRJ_default=default -legacy-libc -O2 -msmart-io=1 -msfr-warn=off -mdfp="/opt/microchip/mplabx/v6.15/packs/Microchip/dsPIC30F_DFP/1.4.104/xc16"
MOREFLAGS = -pedantic -msmall-code -msmall-data -msmall-scalar -Wall -std=c99 -ansi
MCPU = -mcpu=30F4013
DSPFLAGS = --library=q --library=dsp
COMLINK = -omf=elf -mdfp="/opt/microchip/mplabx/v6.15/packs/Microchip/dsPIC30F_DFP/1.4.104/xc16"
build: build1 build2 build3 build4 build5 build6 build7 build8 build9
build1:
xc16-gcc ds18b20.c -o ds18b20.o ${MCPU} ${CFLAGS} ${MOREFLAGS}
build2:
xc16-gcc ADC.c -o ADC.o ${MCPU} ${CFLAGS} ${MOREFLAGS}
build3:
xc16-gcc config.c -o config.o ${MCPU} ${CFLAGS} ${MOREFLAGS}
build4:
xc16-gcc intConfig.c -o intConfig.o ${MCPU} ${CFLAGS} ${MOREFLAGS}
build5:
xc16-gcc uartConfig.c -o uartConfig.o ${MCPU} ${CFLAGS} ${MOREFLAGS}
build6:
xc16-gcc I2C_Lib.c -o I2C_Lib.o ${MCPU} ${CFLAGS} ${MOREFLAGS}
build7:
xc16-gcc LCD_I2C.c -o LCD_I2C.o ${MCPU} ${CFLAGS} ${MOREFLAGS}
build8:
xc16-gcc -o ds18b20.elf ds18b20.o ADC.o config.o intConfig.o uartConfig.o I2C_Lib.o LCD_I2C.o ${MCPU} -DXPRJ_default=default -legacy-libc -Wl,,,--defsym=__MPLAB_BUILD=1,,--script=p30F4013.gld,--stack=16,--check-sections,--data-init,--pack-data,--handles,--isr,--no-gc-sections,--fill-upper=0,--stackguard=16,--no-force-link,--smart-io,--report-mem,--memorysummary,memoryfile.xml ${COMLINK}
build9:
xc16-bin2hex ds18b20.elf -a ${COMLINK}
clean:
rm -f *.d *.o *.elf *.xml *.hex *.map
# https://gcc.gnu.org/onlinedocs/
# https://onlinedocs.microchip.com/pr/GUID-C4E60FF5-3DAB-44F1-BA61-4BD962D8F469-en-US-2/index.html?GUID-A3D1ECDB-7A9F-42AF-A832-DB5288E4EA04
Run Code Online (Sandbox Code Playgroud)
使用 GNU Make,您可以基于现有 C 文件构建目标文件列表,如下所示:
\nOBJS := $(patsubst %.c,%.o,$(wildcard *.c))\n
Run Code Online (Sandbox Code Playgroud)\n然后,您需要一个静态模式规则来单独构建目标文件:
\n$(OBJS): %.o: %.c\n xc16-gcc -c $(CFLAGS) $< -o $@ $(MCPU) $(MOREFLAGS)\n
Run Code Online (Sandbox Code Playgroud)\n(删除-c
from CFLAGS
),或者设置变量,以便可以使用Make\xe2\x80\x99s 自己的内置规则:
CC = xc16-gcc $(MCPU)\nCFLAGS += $(MOREFLAGS)\n
Run Code Online (Sandbox Code Playgroud)\n接下来,使用实际目标为链接的二进制文件定义规则(it\xe2\x80\x99s 总是使用真实目标而不是虚假目标更好):
\nds18b20.elf: $(OBJS)\n xc16-gcc -o $@ $^ $(MCPU) -DXPRJ_default=default -legacy-libc -Wl,,,--defsym=__MPLAB_BUILD=1,,--script=p30F4013.gld,--stack=16,--check-sections,--data-init,--pack-data,--handles,--isr,--no-gc-sections,--fill-upper=0,--stackguard=16,--no-force-link,--smart-io,--report-mem,--memorysummary,memoryfile.xml $(COMLINK)\n
Run Code Online (Sandbox Code Playgroud)\n最后,.hex
目标(我不确定这个,因为你的目标没有明确出现):
ds18b20.hex: ds18b20.elf\n xc16-bin2hex $< -a $(COMLINK)\n
Run Code Online (Sandbox Code Playgroud)\n将第一个虚假目标替换为
\nbuild: ds18b20.hex\n
Run Code Online (Sandbox Code Playgroud)\n你\xe2\x80\x99就完成了。
\n 归档时间: |
|
查看次数: |
637 次 |
最近记录: |