我有以下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)
但如何?
答案 0 :(得分:2)
首先,请勿使用$(shell ls *.c)
,但要更好$(wildcard *.c)
。请花点时间阅读documentation of GNU make
然后,您通常不想在Makefile
- s中使用标题,您希望标题上包含依赖项。
例如,如果你知道foo.o
同时需要foo.c
和header.h
(因为#include "header.h"
中有foo.c
你会添加像
foo.o: foo.c header.h
在Makefile
中...另请参阅this example。
使用GCC选项可以通过某种方式自动化此类依赖项;阅读Invoking GCC,特别是preprocessor options,如-M
(详情取决于您的项目和编码惯例)
对于一个总共几千行的几十个文件的简单项目,您应该首先使用依赖项明确地编写Makefile
。稍后你可以自动化(但在简单的项目中不值得麻烦)。
在某些情况下,某个实用程序(例如swig,bison生成生成头文件*.h
或C文件*.c
, ...或您自己的脚本或程序)。然后,在Makefile
。
您可以使用make --trace
或remake
与-x
一起调试Makefile
。
在现有source code项目的free software中寻找灵感(例如在github上)。