我有以下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.c
和header.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
是由某些实用程序生成(例如 swig 、 bison ,...或您自己的脚本或程序)。然后在 Makefile
中添加适当的特定规则。
您可以使用 make --trace
或 remake
与 -x
来调试 Makefile
。
在一些现有的 source code 项目的 free software 中寻找灵感(例如在 github 上)。
关于c - 如何向 Makefile 添加 header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48110661/