2

我已经实现了一个二叉树程序,其中包括带有函数的 tree.c、带有函数声明的 tree.h 和用于测试的 main.c。另外,我有一个makefile,它是:

CC=gcc
CFLAGS=-g -Wall
DEPS = tree.h
OBJ = main.o tree.o 

%.o: %.c $(DEPS)
    $(CC) -c -o $@ $< $(CFLAGS)

tree: $(OBJ)
    $(CC) -o $@ $^ $(CFLAGS)

clean:
    rm -f *.o tree

现在我想让它生成一个库,不仅是二叉树函数的对象文件,然后在 makefile 中生成 doxygen 的文档。任何帮助都会有所帮助。

4

2 回答 2

8

我知道我的回答来晚了,但我希望有人能从中受益。

我有一个生成 Doxygen 文档的生成文件。您必须稍微扭曲 Doxygen 创建适合您需要的 Doxygen 设置文件,然后在编辑器中打开它并删除包含以下两个设置的行(稍后将由 make 文件添加它们)

INPUT
FILE_PATTERNS

添加这一行

@INCLUDE = doxyfile.inc

以不同的名称保存此文件,我使用 Doxyfile.mk

在你的makefile中你需要一个源列表和它们所在的目录示例

SRCS =  $(OBJS:.o=.c)
SRCDIRS = ./src
SRCDIRS += ./other_src

现在您可以将此规则放入 Makefile 中,它将创建文件 doxyfile.inc,其中包含您从 Doxyfile.mk 中删除的设置。

.PHONY: all clean distclean doxy

# If makefile changes, maybe the list of sources has changed, so update doxygens list
doxyfile.inc: Makefile.mk
        echo INPUT         =  $(SRCDIRS) > doxyfile.inc
        echo FILE_PATTERNS =  *.h $(SRCS) >> doxyfile.inc

doxy: doxyfile.inc $(SRCS) 
        doxygen.exe doxyfile.mk

奖励:如果从像 Eclipse 这样的 IDE 内部运行,Doxygen 吐出的错误会变成可点击的,并且会跳转到错误的注释。

于 2013-11-07T09:54:33.150 回答
1

好吧,我真的不知道 doxygen 命令的语法,所以我会做一个通用的答案:

在你的 Makefile 中,每个

term: [dep]
    action

是一个目标。

因此,如果您添加以下内容:

doc: $(OBJ)
    doxygen with-correct-options

您将能够使用以下方法生成文档:

make doc

doc这里是目标的名称)

现在,如果您添加:

all: tree doc
    @echo "Generating program and doc."

您将拥有通过简单调用生成的程序和文档

make

最后,您的 Makefile 可以使用另外一条语句:.PHONY. 这是“一种将许多目标之一标记为不直接生成文件的方法,并确保即使存在与目标同名的文件也能执行它们”。换句话说,就是要确保doc, cleanorall始终被执行,即使文件名为doc, cleanorall存在。

它的语法如下:

.PHONY: all clean doc

并且通常放在 Makefile 的末尾。

于 2012-12-08T12:27:11.033 回答