Cmake+Kconfig项目构建
提供了用于cmake和Kconfig协同配置的工程模板 利用kconfig生成的配置关键字,用于控制camke的编译过程 同时关键字产生对应的宏定义,用于对应的代码实现
Cmake+Kconfig项目构建
---------------------------------------------------------------------------------------手动分割线--------------------------------------------------------------------------------
本文章参考了以下文章:
无
---------------------------------------------------------------------------------------手动分割线--------------------------------------------------------------------------------
cmake+kconfig项目构建
---------------------------------------------------------------------------------------文章开始--------------------------------------------------------------------------------
一、引言
CMake和Kconfig是两个在软件开发领域中广泛使用的工具,它们提供了强大的功能来帮助开发人员管理和构建他们的项目。本文将介绍CMake和Kconfig的基本概念、优势,以及如何将它们结合起来实现高效的项目构建。
二、介绍
什么是CMake和Kconfig?
CMake是一个跨平台的开源构建系统,它使用类似于编程语言的配置文件来定义项目的构建过程。通过CMake,开发人员可以方便地管理项目的目录结构、依赖关系和构建选项,从而实现跨平台的项目构建。
Kconfig是一个用于项目配置的工具,它提供了一种简单而灵活的方式来定义项目的配置选项和特性。通过Kconfig,开发人员可以轻松地定义和管理项目的各种配置选项,使项目具有更高的可配置性和灵活性。
CMake与Kconfig的优势
CMake和Kconfig具有许多优势,使它们成为开发人员首选的项目构建和配置工具之一:
跨平台性:CMake和Kconfig都是跨平台的工具,可以在各种操作系统和硬件平台上使用。
灵活性:CMake和Kconfig提供了灵活的配置选项,使开发人员能够根据项目的需求自定义构建和配置过程。
可扩展性:CMake和Kconfig都支持插件和扩展,可以轻松地集成其他工具和功能,满足不同项目的需求。
社区支持:CMake和Kconfig拥有庞大的用户社区和活跃的开发者社区,提供了丰富的文档、教程和支持资源。
CMake在项目构建中的应用
CMake在项目构建中发挥着重要的作用,它提供了丰富的功能和工具,帮助开发人员管理和构建复杂的项目结构和依赖关系。以下是一些CMake在项目构建中的常见应用:
定义项目结构:通过CMakeLists.txt文件,开发人员可以定义项目的目录结构和源文件布局,使项目的组织更加清晰和可维护。
管理依赖关系:CMake可以自动查找和管理项目的依赖关系,包括第三方库、外部工具和系统资源,从而简化了项目的构建和部署过程。
配置构建选项:CMake允许开发人员根据项目的需求定义和配置构建选项,例如编译器选项、编译器标志和目标平台,以实现定制化的构建过程。
跨平台支持:CMake提供了跨平台的构建功能,可以在各种操作系统和编译器下生成相同的构建结果,从而确保项目的可移植性和兼容性。
Kconfig在项目配置中的应用
Kconfig主要用于定义项目的配置选项和特性,它提供了一种简单而灵活的方式来实现项目的可配置性和灵活性。以下是一些Kconfig在项目配置中的常见应用:
定义配置选项:通过Kconfig文件,开发人员可以定义项目的配置选项和特性,例如功能开关、模块选择和编译选项,以满足不同用户和场景的需求。
生成配置头文件:Kconfig可以自动生成配置头文件,其中包含了项目的配置选项和宏定义,方便开发人员在代码中使用。
支持条件配置:Kconfig支持条件配置,可以根据条件和约束来控制配置选项的可见性和可用性,从而实现更灵活和可控制的配置过程。
集成外部配置:Kconfig可以集成外部配置和环境变量,例如系统配置文件、用户配置文件和默认配置文件,以实现与外部系统和环境的无缝集成。
结合CMake与Kconfig的项目构建实践
将CMake与Kconfig结合起来,可以实现对项目的完整管理和配置
三、ck构建工具的使用
Cmake配置使用分为两种:
递归目录: list_template() 模块目录: module_template() 两个函数的参数都是依赖对应的宏,如果该宏存在,则该部分的cmake执行,可以不输入参数,一定会执行
windows下:
进入到cd .\project\template1\路径下
windows配置:.\ck_script.bat cn或者.\ck_script.bat config
windows构建:.\ck_script.bat b或者.\ck_script.bat build
windows编译:.\ck_script.bat m或者.\ck_script.bat make
windows清除:.\ck_script.bat cl或者.\ck_script.bat clean
windows自动配置、构建、编译:.\ck_script.bat a或者.\ck_script.bat auto
Linux下:
进入到cd .\project\template1\路径下
Linux配置:.\ck_script.sh cn或者.\ck_script.sh config
Linux构建:.\ck_script.sh b或者.\ck_script.sh build
Linux编译:.\ck_script.sh m或者.\ck_script.sh make
Linux清除:.\ck_script.sh cl或者.\ck_script.sh clean
Linux自动配置、构建、编译:.\ck_script.sh a或者.\ck_script.sh auto
四、api说明
函数
print_paths()
这个函数用于输出当前源路径和当前构建路径。
list_template([temp_arg])
非模块的构建模板函数。参数为相关的Kconfig配置的宏定义依赖。
例如list_template(MOD1_ENABLE)表示如果定义了MOD1_ENABLE该路径中的的所有源文件、汇编文件、头文件、静态库都会参与构建,同时会自动搜索下一级目录的CMakeLists.txt加入构建过程;没有定义则不会参与构建。
module_template([temp_arg])
模块的构建模板函数。参数为相关的Kconfig配置的宏定义依赖。
例如module_template(MOD1_ENABLE)表示如果定义了MOD1_ENABLE该路径下(会递归搜索)的所有源文件、汇编文件、头文件、静态库都会参与构建;没有定义则不会参与构建。
find_current_source_file([output_variable])
在当前目录查找源文件,并将结果输出在 output_variable 变量中。
find_recurse_source_file([output_variable])
在当前目录及其子目录递归查找源文件,并将结果输出在 output_variable 变量中。
add_some_source_file(file1 [file2 …])
向项目中添加特定的源文件。
find_current_asm_file([output_variable])
在当前目录查找汇编文件,并将结果输出在 output_variable 变量中。
find_recurse_asm_file([output_variable])
在当前目录及其子目录递归查找汇编文件,并将结果输出在 output_variable 变量中。
add_some_asm_file(file1 [file2 …])
向项目中添加特定的汇编文件。
find_current_header_dir([output_variable])
在当前目录查找头文件,并将结果输出在 output_variable 变量中。
find_recurse_header_dir([output_variable])
在当前目录及其子目录递归查找头文件,并将结果输出在 output_variable 变量中。
add_some_header_dir(dir1 [dir2 …])
向项目中添加特定的头文件路径。
find_current_library_file([output_variable])
在当前目录查找静态库,并将结果输出在 output_variable 变量中。
find_recurse_library_file([output_variable])
在当前目录及其子目录递归查找静态库,并将结果输出在 output_variable 变量中。
add_some_library_file(file1 [file2 …])
向项目中添加特定的静态库文件。
set_external_path(PATH BINARY_NAME)
添加外部路径,并指定与之对应的二进制目录。
find_cmakelists_current_dir([exclude_folders])
查找当前目录下一级的所有构建文件,并添加到构建路径中。
本文对应的项目:
cmake-kconfig-build-project
----------------------------------------------------------------------------------到这里就结束了-------------------------------------------------------------------------------
时间流逝、年龄增长,是自己的磨炼、对知识技术的应用,还有那不变的一颗对嵌入式热爱的心!
到这里就结束了,希望大家点赞o( ̄▽ ̄)d、关注(o)/~、评论(▽)!
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)