我目前正在编写小型简单的C程序。截至目前,我的Makefiles包含一些文字:
program_name:
clang -o program_name program_name.c
这就是我需要的吗?我不确定是否需要在.o和.h文件之间建立依赖关系,即使它们不一定存在于我的项目中。
答案 0 :(得分:5)
你工作太辛苦了。您应该将Makefile简化为2行:
CC=clang
program_name: some.h
无需指定对program_name.o
或program_name.c
的依赖关系,因为这些是隐含的。由于您使用的是默认规则,因此也无需明确指定规则。但是,确实需要拼写对头文件的依赖性。
答案 1 :(得分:1)
我自己使用GNU Make。不确定你在用什么。对于GNU Make,请参阅:
答案 2 :(得分:1)
这就是我需要的吗?
没有
我不确定是否需要在.o和.h文件之间建立依赖关系
一般情况下,您应该,特别是如果您使用的是自定义数据类型(即使不是这样:如果您平台上的ABI /调用约定由黑魔法组成,则函数签名中的更改可能会破坏整个程序)。 / p>
我正在使用的模板通常是:
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 $@ $^