c - 如何向 Makefile 添加 header ?

标签 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)

但是如何

最佳答案

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

然后,您通常不需要 Makefile-s 中的 header ,而是希望 header 具有依赖性

例如,如果知道foo.o需要foo.cheader.h (因为您的 foo.c 中有一些 #include "header.h"),您将添加一个依赖项,例如

foo.o: foo.c header.h

在你的Makefile中...另请参阅 this example

有一些方法可以使用 GCC 选项来自动化此类依赖关系;阅读 Invoking GCC ,特别是 preprocessor options-M

(详细信息取决于您的项目和编码约定)

对于一个包含几十个文件、总共几千行的简单项目,您应该首先显式地编写 Makefile 以及依赖项。稍后您可能会实现自动化(但在简单的项目中不值得这么麻烦)。

在某些情况下,头文件 *.h 或 C 文件 *.c 是由某些实用程序生成(例如 swigbison ,...或您自己的脚本或程序)。然后在 Makefile 中添加适当的特定规则。

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

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

关于c - 如何向 Makefile 添加 header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48110661/

相关文章:

makefile - 使用 -fPIC 重新编译

c - C 中的段错误

c - C typedef 结构中定义之前名称的用途

c - 使用 MPC 库解析返回语法定义错误

c - S_ISREG 宏未定义

c++ - MinGW32 链接错误 - 在一个命令中构建,但使用 Makefile 失败

vim - vimgrep 和 make 的不同快速修复缓冲区

c - 程序是如何运行的??

makefile - Makefile 中是否可能依赖符号链接(symbolic link)?

makefile - 在Windows上编译OpenSSL MinGw-make [1] : *** [Makefile:2800: crypto/dso/dso_win32.o] Error 1