开源改变世界

makefile 中的标头依赖项? #130

推推 grbl 3年前 (2023-01-21) 119次浏览

关闭
chuck-h 打开了这个问题 2012 年 10 月 30 日 · 5 条评论
关闭

makefile 中的标头依赖项?#130

chuck-h 打开了这个问题 2012 年 10 月 30 日 · 5 条评论

注释

makefile 中的标头依赖项? #130

我不是 Makefile 高手,但对我来说似乎 make 文件缺少标头依赖项。我做了很多“清洁”以确保。

我错过了什么吗?这是修复吗? http://stackoverflow.com/a/2394668

makefile 中的标头依赖项? #130
成员

我也不是 Makefile 高手,但我不确定您在逃避什么。’使清洁; make’命令在我这边毫无问题地构建了Grbl。你能详细说明一下吗?

makefile 中的标头依赖项? #130
作者

是的,’打扫卫生;使’工作正常。但在理想情况下,“make”的一个主要目的是只重新编译那些需要重新编译的文件。在 grbl 上,如果我编辑一个 .c 文件,然后“制作”,这会正常工作。但是如果我只编辑 .h 文件(例如 config.h),一个普通的“make”不会做任何事情。Make 似乎不知道头文件依赖性。

考虑到完全重建(’make clean; make’)只需要不到一分钟的时间,这不是一个实际问题。然而,它是“Just Not Right ™”。如果一些 Maven of Make 想提出改进建议,我会洗耳恭听。如果没有,没什么大不了的。在我自己的 makefile 经验中,对很多人来说“简单”的东西常常让我感到困惑。

makefile 中的标头依赖项? #130

我对 Makefile 做了一些修改,它似乎可以工作。我虽然
已经对 repo 进行了分叉,但显然我没有,所以这是
补丁(将其复制粘贴到文件中并应用它,或者手动删除
以 – 开头的行并替换为以 + 开头的行):

diff –git a/Makefile b/Makefile
index 6011ae0..cd76de3 100644
— a/Makefile
+++ b/Makefile
@@ -30,8 +30,9 @@
DEVICE = atmega328p
CLOCK = 16000000
PROGRAMMER = -c avrisp2 -P usb
-OBJECTS = main.o motion_control.o gcode.o spindle_control.o serial.o
protocol.o stepper.o \

  •         eeprom.o settings.o planner.o nuts_bolts.o limits.o print.o
    

    +SRC = main.c motion_control.c gcode.c spindle_control.c serial.c
    protocol.c stepper.c \

  •         eeprom.c settings.c planner.c nuts_bolts.c limits.c print.c
    

    +OBJECTS = $(SRC:.c=.o)

    保险丝 = -U hfuse:w:0xd9:m -U lfuse:w:0x24:m

    保险丝 = -U hfuse:w:0xd2:m -U lfuse:w:0xff:m

    当程序员备份时用这个更新那行:

    @@ -39,24 +40,27 @@ FUSES = -U hfuse:w:0xd2:m -U lfuse:w:0xff:m

    仅当您知道自己在做什么时才调整以下行:

+# 用于生成依赖文件的编译器标志。
+GENDEPFLAGS = -MMD -MP -MF $(@f).d
+
AVRDUDE = avrdude(����������)−�(DEVICE) -B 10 -F
COMPILE = avr-gcc -Wall -Os -DF_CPU=$(CLOCK) -mmcu=$(DEVICE) -I.
-ffunction-sections

象征性目标:

-全部:grbl.hex
+全部:grbl.hex

-.co:

  • (�������)−�< -o $@
    +%.o : %.c
  • (�������)(GENDEPFLAGS) -c<−�@

-.So:
+%.o : %.S
(�������)−����������−���ℎ−���−�< -o $@

“-x assembler-with-cpp”应该不是必需的,因为这是

默认

.S(大写 S)扩展名的文件类型。然而,大写

Windows 上并不总是保留字符。确保 WinAVR

兼容性手动定义文件类型。

-。CS:

  • (�������)−�< -o $@
    +%.S : %.c
  • (�������)(GENDEPFLAGS) -S<−�@

闪存:所有
$(AVRDUDE) -U 闪存:w:grbl.hex:i
@@ -92,3 +96,5 @@ disasm: main.elf

cpp:
$(COMPILE) -E main.c
+
+-include $(SRC:.c=.od)

makefile 中的标头依赖项? #130
贡献者

你好,

我也被这个惹恼了,所以我修好了:-)

我为它创建了一个 pull request,所以我希望它能很快被合并到 edge 中。

问候,
汉斯

makefile 中的标头依赖项? #130
成员

谢谢@hin!今天早上合并了请求。

喜欢 (0)