【发布时间】:2014-12-11 08:53:04
【问题描述】:
我正在尝试在 Raspbian (Raspberry Pi) 中为我的 C 程序创建一个 Makefile。 我的程序由一堆 .c 和 .h 文件组成。我看过无数的 Makefile,但我就是不明白它是如何与多个文件一起工作的。 Makefile 中总是有 .o 文件,但据我所知,目标文件是编译的结果,所以我没有任何 o。文件,因为我正在尝试编译我的 .c 文件。
请向我解释这是如何工作的。
编辑:
谢谢。所以我尝试了这个,它开始编译,但出现“多重定义”错误。示例:
这些是我的文件:
main.c main.h
calibration.c calibration.h
file.c file.h
frame.c frame.h
gamepad.c gamepad.h
gpio.c gpio.h
uart.c uart.h
types.h
这是我的生成文件:
all: main
main: main.o calibration.o file.o frame.o gamepad.o gpio.o uart.o
%.o: %.c
gcc -c -std=c99 -Wall $< -o $@ -lncurses
我可以把'types.h'放在哪里? 对于每个文件,我都会收到“多个定义”错误
【问题讨论】:
-
您将源 (
.c) 文件编译成 到 对象 (.o) 文件。对于gcc,添加-c选项。然后,当您拥有目标文件时,将它们链接在一起。如果您正确设置了依赖项,则只有您更改的源文件才会在您调用make时重新编译为目标文件。 -
所以我一次编译一个 .c 文件,然后创建一个生成文件,将所有目标文件链接在一起?
-
@user3030653 :没有make文件可以做到这一点。如果您的真正问题是编译和链接多个源,而不是对 makefile 的特定需求,那么像 Code::Blocks 这样的 IDE 将为您解决这个问题,并且可以通过 aptget 在 RPi 上使用,并且具有其他优势,例如 GUI GDB 接口和代码语法高亮和导航。