Linux
linux核心Makefile如何理解.config?
linux核心Makefile如何理解.config?它有defconfig文件的解析器嗎?它必須為 defconfig 中的每個啟用選項生成大量#defines,並且還必鬚根據 .config 文件中的指令維護大量編譯或未編譯的次要 Makefile。
該
.config
文件的語法與 make 兼容;例如,像這樣的行將CONFIG_CRC16=m
make 變數CONFIG_CRC16
設置為 valuem
。它由 make 解析並間接包含在頂層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
目標呼叫的程序生成(scripts/kconfig/conf
對於批處理目標,如oldconfig
、scripts/kconfig/qconf
forxconfig
等);它的原始碼進行了scripts/kconfig/confdata.c
一些非常簡單的文本處理。