LinuxカーネルMakefileは.configをどのように理解していますか? defconfigファイルのパーサーはありますか? defconfigの有効なオプションごとに複数の#defineを生成し、.configファイルのディレクティブに基づいてコンパイルまたはコンパイルされていない多くのセカンダリMakefileも維持する必要があります。
答え1
このファイルの構文は.config
make と互換性があります。たとえば、このような行はCONFIG_CRC16=m
make変数をCONFIG_CRC16
valueに設定しますm
。 makeによって解析され、toplevelに間接的に含まれますMakefile
。
Makefile
含む-include include/config/auto.conf
include/config/auto.conf
Makefile
ターゲットの最上位レベルを再帰的に呼び出してビルドします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
などのバッチターゲットの場合)。そのソースコードは非常に単純なテキスト処理を実行します。oldconfig
scripts/kconfig/qconf
xconfig
scripts/kconfig/confdata.c