我目前正在编写小型简单的 C 程序。到目前为止,我的 Makefile 文件包含以下内容:
program_name:
clang -o program_name program_name.c
这就是我所需要的吗?我不确定是否需要在 .o 和 .h 文件之间建立依赖关系,即使它们不一定存在于我的项目中。
你工作太辛苦了。您应该将 Makefile 简化为 2 行:
CC=clang
program_name: some.h
不需要指定对program_name.o
or的依赖program_name.c
,因为它们是隐含的。也无需明确给出规则,因为您使用的是默认规则。但是,确实需要说明对头文件的依赖关系。
我自己使用 GNU Make。不确定你用的是什么。对于 GNU Make,请参阅:
这就是我所需要的吗?
不。
我不确定是否需要在 .o 和 .h 文件之间建立依赖关系
通常,您应该,特别是如果您使用自定义数据类型(即使不是:如果您平台上的 ABI/调用约定包含黑魔法,则函数签名的更改可能会破坏整个程序)。
我使用的模板通常是:
CC = gcc
LD = $(CC)
CFLAGS = -c -Wall
LDFLAGS = -lwhatever -lfoo -lbar
TARGET = myprog
OBJECTS = $(patsubst %.c, %.o, $(wildcard *.c))
all: $(TARGET)
$(TARGET): $(OBJECTS)
$(LD) $(LDFLAGS) -o $@ $^
%.c: %.h
%.o: %.c
$(CC) $(CFLAGS) -o $@ $^