如果我在 Doxyfile 中提供 CLANG_DATABASE_PATH,我还需要提供 INPUT 和 INCLUDE_PATH 吗?
If I provide CLANG_DATABASE_PATH in Doxyfile do I still have to provide INPUT and INCLUDE_PATH?
我正在使用 Doxygen 来记录我的项目。我在目录 C:\dev\project_dir
中有一个 compile_commands.json
文件描述我的项目的源代码。我设置了以下变量:
CLANG_ASSISTED_PARSING = YES
CLANG_DATABASE_PATH = C:\dev\project_dir
那么这是如何工作的呢?我还必须设置变量 INPUT
和 INCLUDE_PATH
吗?好像所有的文件和编译它们的指令,包括从哪里得到头文件,都写在编译数据库里了。
如果我必须同时设置变量 INPUT
和 INCLUDE_PATH
,我应该将它们设置成什么?编译数据库列出了项目的源文件和头文件,它们分散在多个不同的目录中。这种情况应该怎么处理。
我找到了答案。
所以我在 Doxyfile 中设置了以下变量。
CLANG_ASSISTED_PARSING = YES
CLANG_DATABASE_PATH = C:\dev\project_dir
然后我将以下变量设置为空白:
INPUT =
INCLUDE_PATH =
INPUT
指定要处理的源代码 *.c *.cpp
文件 and/or 目录的路径。 INCLUDE_PATH
指定要处理的头代码 *.h *.hpp
个文件 and/or 个目录的路径。
CLANG_ASSISTED_PARSING = YES
允许使用 clang 编译器作为解析器而不是默认的 doxygen 解析器。因此,如果 INPUT
和 INCLUDE_PATH
未设置,则它会从编译数据库本身获取源代码文件和头代码文件。 CLANG_DATABASE_PATH
指定存放编译数据库的目录。它默认从该目录中抓取名为 compile_commands.json
的文件,这意味着编译数据库的名称是固定的。如果您将编译数据库命名为 JSON 文件,除 compile_commands.json
之外的任何其他文件都无法找到它。
因此,如果使用 clang 编译数据库 JSON 文件,则所有正在编译的 *.c *.cpp
文件都放在 INPUT
中。并且所有的头代码文件都放在了INCLUDE_PATH
中。 doxygen 使用的 clang 解析 JSON,每次遇到 -I
编译器标志时,它都会将该文件识别为头文件,并将其添加到 INCLUDE_PATH
。这意味着设置 INPUT
和 INCLUDE_PATH
不是强制性的 。所以如果编译数据库格式正确,所有头文件都显式标记-I
,只设置CLANG_DATABASE_PATH
即可。
]
但在某些情况下,INCLUDE_PATH
也需要明确设置。例如,如果您有一个源代码文件,其中包含一个头文件,其中包含另一个头文件。
first.h
int one(int);
second.h
#include "first.h"
int two(int);
code.cpp
#include "second.h"
int main(void) {}
而编译数据库中的命令是这样的:
clang -I path/to/second.h -c code.cpp
所以在这种情况下,doxygen 会读取该文件,并且会在内部设置以下变量:
INPUT = code.cpp
INCLUDE_PATH = path/to/second.h
这意味着虽然 doxygen 会索引 second.h
,但它会错过 first.h
,因为 -I
编译数据库中没有明确提供该头文件。那将是一个错误。所以我们需要在 doxyfile 中明确列出它,这是一个额外的包含路径。
INPUT =
INCLUDE_PATH = path\to\first.h
CLANG_ASSISTED_PARSING = YES
CLANG_DATABASE_PATH = C:\dev\project_dir
我正在使用 Doxygen 来记录我的项目。我在目录 C:\dev\project_dir
中有一个 compile_commands.json
文件描述我的项目的源代码。我设置了以下变量:
CLANG_ASSISTED_PARSING = YES
CLANG_DATABASE_PATH = C:\dev\project_dir
那么这是如何工作的呢?我还必须设置变量 INPUT
和 INCLUDE_PATH
吗?好像所有的文件和编译它们的指令,包括从哪里得到头文件,都写在编译数据库里了。
如果我必须同时设置变量 INPUT
和 INCLUDE_PATH
,我应该将它们设置成什么?编译数据库列出了项目的源文件和头文件,它们分散在多个不同的目录中。这种情况应该怎么处理。
我找到了答案。
所以我在 Doxyfile 中设置了以下变量。
CLANG_ASSISTED_PARSING = YES
CLANG_DATABASE_PATH = C:\dev\project_dir
然后我将以下变量设置为空白:
INPUT =
INCLUDE_PATH =
INPUT
指定要处理的源代码 *.c *.cpp
文件 and/or 目录的路径。 INCLUDE_PATH
指定要处理的头代码 *.h *.hpp
个文件 and/or 个目录的路径。
CLANG_ASSISTED_PARSING = YES
允许使用 clang 编译器作为解析器而不是默认的 doxygen 解析器。因此,如果 INPUT
和 INCLUDE_PATH
未设置,则它会从编译数据库本身获取源代码文件和头代码文件。 CLANG_DATABASE_PATH
指定存放编译数据库的目录。它默认从该目录中抓取名为 compile_commands.json
的文件,这意味着编译数据库的名称是固定的。如果您将编译数据库命名为 JSON 文件,除 compile_commands.json
之外的任何其他文件都无法找到它。
因此,如果使用 clang 编译数据库 JSON 文件,则所有正在编译的 *.c *.cpp
文件都放在 INPUT
中。并且所有的头代码文件都放在了INCLUDE_PATH
中。 doxygen 使用的 clang 解析 JSON,每次遇到 -I
编译器标志时,它都会将该文件识别为头文件,并将其添加到 INCLUDE_PATH
。这意味着设置 INPUT
和 INCLUDE_PATH
不是强制性的 。所以如果编译数据库格式正确,所有头文件都显式标记-I
,只设置CLANG_DATABASE_PATH
即可。
但在某些情况下,INCLUDE_PATH
也需要明确设置。例如,如果您有一个源代码文件,其中包含一个头文件,其中包含另一个头文件。
first.h
int one(int);
second.h
#include "first.h"
int two(int);
code.cpp
#include "second.h"
int main(void) {}
而编译数据库中的命令是这样的:
clang -I path/to/second.h -c code.cpp
所以在这种情况下,doxygen 会读取该文件,并且会在内部设置以下变量:
INPUT = code.cpp
INCLUDE_PATH = path/to/second.h
这意味着虽然 doxygen 会索引 second.h
,但它会错过 first.h
,因为 -I
编译数据库中没有明确提供该头文件。那将是一个错误。所以我们需要在 doxyfile 中明确列出它,这是一个额外的包含路径。
INPUT =
INCLUDE_PATH = path\to\first.h
CLANG_ASSISTED_PARSING = YES
CLANG_DATABASE_PATH = C:\dev\project_dir