src:包含源代码文件 include:包含头文件 lib:包含库文件 bin:包含可执行文件 obj:包含编译后的目标文件 doc:包含文档和说明文件 test:包含测试代码和数据,根据以上文件夹写一个C语言工程的Makefile
时间: 2023-05-11 15:06:24 浏览: 216
以下是一个简单的Makefile示例,用于构建一个C语言工程:
```
CC = gcc
CFLAGS = -Wall -Wextra -Werror -std=c99
LDFLAGS = -lm
SRCDIR = src
INCDIR = include
LIBDIR = lib
BINDIR = bin
OBJDIR = obj
DOCDIR = doc
TESTDIR = test
SRCS = $(wildcard $(SRCDIR)/*.c)
OBJS = $(patsubst $(SRCDIR)/%.c,$(OBJDIR)/%.o,$(SRCS))
INCS = $(wildcard $(INCDIR)/*.h)
LIBS = $(wildcard $(LIBDIR)/*.a)
TESTS = $(wildcard $(TESTDIR)/*.c)
TARGET = $(BINDIR)/myprogram
.PHONY: all clean test
all: $(TARGET) $(DOCDIR)/README.html
$(TARGET): $(OBJS) $(LIBS)
$(CC) $(LDFLAGS) -o $@ $^
$(OBJDIR)/%.o: $(SRCDIR)/%.c $(INCS)
$(CC) $(CFLAGS) -c -o $@ $<
$(DOCDIR)/README.html: $(DOCDIR)/README.md
pandoc -s -o $@ $<
clean:
rm -f $(TARGET) $(OBJS) $(DOCDIR)/README.html
test: $(TESTS) $(OBJS) $(LIBS)
$(foreach test,$(TESTS),$(CC) $(CFLAGS) -o $(BINDIR)/$(basename $(notdir $(test))) $(test) $(OBJS) $(LIBS);)
```
这个Makefile假设你的工程结构如下:
```
.
├── bin
├── doc
├── include
├── lib
├── obj
├── src
└── test
```
其中,`src`目录包含源代码文件,`include`目录包含头文件,`lib`目录包含库文件,`bin`目录包含可执行文件,`obj`目录包含编译后的目标文件,`doc`目录包含文档和说明文件,`test`目录包含测试代码和数据。
你可以根据自己的工程结构修改Makefile中的变量和规则。
阅读全文