如何将标头添加到Makefile?

时间:2018-01-05 09:28:32

标签: c makefile

我有以下Makefile如何在项目文件夹中添加一些头文件(例如header1.h及其相对header1.c)?

CC := gcc
CFLAGS := -Wall -Wextra -Wpedantic -O3
CFILES := $(shell ls *.c)
PROGS := $(CFILES:%.c=%)

all: $(PROGS)

.PHONY: all clean
clean:
    rm -f *~ $(PROGS)

即使逐个添加它们也可以(不需要使用通配符)。

我想我应该编辑以下一行:

CFILES := $(shell ls *.c)

如何

1 个答案:

答案 0 :(得分:2)

首先,请勿使用$(shell ls *.c),但要更好$(wildcard *.c)。请花点时间阅读documentation of GNU make

然后,您通常不想在Makefile - s中使用标题,您希望标题上包含依赖项

例如,如果知道foo.o同时需要foo.cheader.h(因为#include "header.h"中有foo.c你会添加像

这样的依赖项
foo.o: foo.c header.h

Makefile中...另请参阅this example

使用GCC选项可以通过某种方式自动化此类依赖项;阅读Invoking GCC,特别是preprocessor options,如-M

(详情取决于您的项目和编码惯例)

对于一个总共几千行的几十个文件的简单项目,您应该首先使用依赖项明确地编写Makefile。稍后你可以自动化(但在简单的项目中不值得麻烦)。

在某些情况下,某个实用程序(例如swigbison生成生成头文件*.h或C文件*.c, ...或您自己的脚本或程序)。然后,在Makefile

中添加适当的特定规则

您可以使用make --traceremake-x一起调试Makefile

在现有source code项目的free software中寻找灵感(例如在github上)。