这里所描述的条件编译是这样一种需求: 在make menuconfig里选择编译条件项, 编译的时候根据配置结果,选择不同的编译方法, 最后代码执行的时候就会根据配置选项执行不同的动作.
例如,我想在make menuconfig配置菜单栏中增加一个配置选项,用于指示是否使用"疯狂模式".如果是,就天马行空, 如果不是,就一本正经. 下面就按照上述顺序介绍实现过程.
1. 修改Kconfig, 增加配置选项.
config CRAZY_MODE
bool "crazy mode for brave people"
default y
help
mode: crazy
2. 修改Makefile, 使用配置结果
配置结果保存在.config文件中,需要将其include到对应的Makefile1文件中.
这里配合CMake来编译.其中Makefile1要调用CMake生成的Makefile.
假设Makefile1, CMakeLists.txt, 源文件都在同一目录下.
2.1 Makefile1
include .config
ifeq ($(CONFIG_CRAZY_MODE), y)
CRAZY_ENABLE ?= yes
else
CRAZY_ENABLE ?= no
endif
all:
cmake ./ -DCONFIG_FEATURE_CRAZY=$(CRAZY_ENABLE)
make
2.2 CMakeLists.txt 根据CONFIG_FEATURE_CRAZY配置结果编译不同的文件.
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
project(selectmode)
include_directories(include) #头文件放置位
if(CONFIG_FEATURE_CRAZY MATCHES "yes")
add_definitions(-DCONFIG_FEATURE_CRAZY)
endif()
add_executable(mode mode.c)
target_link_libraries(mode xx)
3. 修改源文件mode.c
#include <stdio.h>
int main()
{
#ifdef CONFIG_FEATURE_CRAZY
printf("How crazy you are!\n");
#endif
return 0;
}
4. 配置并编译
make menuconfig
make -f Makefile1
5. 运行
./mode