LinuxカーネルMakefileは.configをどのように理解していますか?

LinuxカーネルMakefileは.configをどのように理解していますか?

LinuxカーネルMakefileは.configをどのように理解していますか? defconfigファイルのパーサーはありますか? defconfigの有効なオプションごとに複数の#defineを生成し、.configファイルのディレクティブに基づいてコンパイルまたはコンパイルされていない多くのセカンダリMakefileも維持する必要があります。

答え1

このファイルの構文は.configmake と互換性があります。たとえば、このような行はCONFIG_CRC16=mmake変数をCONFIG_CRC16valueに設定しますm。 makeによって解析され、toplevelに間接的に含まれますMakefile

  • Makefile含む-include include/config/auto.conf
  • include/config/auto.confMakefileターゲットの最上位レベルを再帰的に呼び出してビルドしますsilentoldconfig

ファイルの条件付きコンパイルは主にターゲット名を使用して行われます。 makefile には次の規則が含まれます。

obj-$(CONFIG_CRC16) += crc16.o

したがって、ターゲットはobj-y構成オプションを使用して組み込みでアクティブなすべてのオブジェクトをビルドし、モジュールでアクティブなすべてのobj-mオブジェクトをビルドします。より複雑な場合は、makefileに条件付きディレクティブがあります。

Cの条件付きコンパイルの場合、Cソースファイルにはinclude/generated/autoconf.h次の行が含まれています#define CONFIG_CRC16_MODULE 1。このファイルは、ターゲットinclude/config/auto.confから呼び出されたプログラムによって生成されますxxxconfig(、forscripts/kconfig/confなどのバッチターゲットの場合)。そのソースコードは非常に単純なテキスト処理を実行します。oldconfigscripts/kconfig/qconfxconfigscripts/kconfig/confdata.c

関連情報