Linux内核源代码可以使用make tags
命令获取编辑器的标签。在scripts/tags.sh中,第7行和第8行指出“使用以下环境变量:ARCH
、SUBARCH
、SRCARCH
、srctree
、src
、obj
”。我想问一下这些变量的含义是什么?
我已经阅读了这篇文章,但它只提到了两个变量:SRCARCH
和SUBARCH
。
Linux内核源代码可以使用make tags
命令获取编辑器的标签。在scripts/tags.sh中,第7行和第8行指出“使用以下环境变量:ARCH
、SUBARCH
、SRCARCH
、srctree
、src
、obj
”。我想问一下这些变量的含义是什么?
我已经阅读了这篇文章,但它只提到了两个变量:SRCARCH
和SUBARCH
。
下面的变量可以传递给tags.sh
(实际上你应该将它们传递给make tags cscope
命令,然后Makefile会为你将它们传递给tags.sh
)。
ARCH
:要索引的架构。你可以通过在内核源代码树中执行ls -l arch/
来查看所有架构列表。
SUBARCH
:这个变量的含义取决于你的架构:
ARCH=arm
,SUBARCH
将用于确定arch/arm/mach-*
和arch/arm/plat-*
目录,并且这些目录将被索引ARCH=um
,使用SUBARCH
指定你实际想要在用户模式Linux中使用的架构(比如SUBARCH=arm
或SUBARCH=x86
)ALLSOURCE_ARCHS
:使用这个变量来索引多个架构。比如ALLSOURCE_ARCHS="x86 mips arm"
或ALLSOURCE_ARCHS="all"
。如果你只想索引一个架构,省略这个变量并使用ARCH
。
COMPILED_SOURCE
:如果你只想索引实际编译过的源文件,将该变量设置为1。如果你想索引所有源文件,则省略设置此变量。
O=
(这实际上是Makefile参数):使用绝对路径(如果你想在内核目录之外加载创建的cscope/ctags索引文件,比如开发基于内核的模块时)。如果你想使用相对路径(即你只在内核目录中进行开发),只需省略该参数。
SRCARCH
:从Makefile中的ARCH
变量设置并传递给脚本。你可能不需要操纵它,只需正确设置ARCH
变量即可。
srctree
:内核源代码树路径。如果你通过make cscope tags
使用该脚本,则该变量将自动从Makefile中传递。
src
和obj
变量:这些变量不再被scripts/tags.sh
使用。它已经被替换为利用KBUILD_SRC
变量,当你为它提供O=...
参数时,Makefile会自动提供该变量。
基本上,我建议只通过make
调用来使用scripts/tags.sh
。例如:
$ make O=. ARCH=arm SUBARCH=omap2 COMPILED_SOURCE=1 cscope tags
或者
$ make ARCH=x86 cscope tags
COMPILED_SOURCE
)实际上都是内核构建系统变量,所以您可以在 Documentation/kbuild/kbuild.txt 中阅读到它们的大部分内容,但这与 "tags.sh" 的相关性不太相符。 - Sam Protsenko