Skip to content

sgl-org/lite-manager

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

lite-config

什么是lite-manager?

lite-manager是一个宏配置和管理工具,自动解决C语言项目中宏依赖的问题。

  1. 你是否讨厌过Cmake的管理十分繁杂,并且效率低下?
  2. 你是否因为处理C语言中众多的宏而持续痛苦?
  3. 你是否一直在寻找一个能够有效处理C语言中文件和宏之间的关系的工具?

使用lite-manager吧,让你的C工程项目变得神清气爽!

安装make工具

安装gnu-make之后,然后添加环境变量。

1. 如何使用它, 步骤如下

例程1:hello world

1. 新建一个hello.c源文件,内容如下:
#include <stdio.h>

int main(void)
{
    printf("hello world, lite-manager\n");
    return 0;
}
2. 新建工程管理文件,默认为lm.cfg,例如,我们现在创建一个lm.cfg文件,然后内容如下:
SRC   += hello.c
3. 生成Makefile文件,执行如下命令:
./lm.exe --gen Makefile --project hello

执行完毕后,会在当前目录生成一个Makefile,这个Makefile就是我们编译需要使用的文件

4. 执行make config && make即可编译项目

2. 宏管理

在lm.cfg文件中添加宏,如下所示:

CONFIG_MACRO_A
    choices = 0, 1, 2, 3

CONFIG_MACRO_B
    choices = [0, 100]
    depends = !CONFIG_MACRO_A

上面的CONFIG_MACRO_A可选择的值为0, 1, 2, 3这四个值,CONFIG_MACRO_B可选择的值为0~100,这个宏与CONFIG_MACRO_A互斥,也就是只有CONFIG_MACRO_A关闭时,CONFIG_MACRO_B才可被开启。
对于上面的宏的值,具体设置需要添加proj.cfg文件,该文件类似于Linux中的.config配置文件,这个配置文件将会设置所有宏的值,如果某些值未设置,则会使用choices中第一个值作为缺损值。例如下面proj.cfg

COMPILER = gcc
CONFIG_DEBUG = y
CONFIG_LOG_LEVEL = 0
CONFIG_MEM_POOL_SIZE = 20
CONFIG_MACRO_CACHE_SIZE = 100
CONFIG_TEST = n
CONFIG_MACRO_xxxx = 25

3. 文件管理

有时候我们需要利用宏来控制单个文件是否参与编译,例如当CONFIG_MACRO_A开启时,编译macro_a.c文件,当CONFIG_MACRO_A不开启时,不编译macro_a.c文件,我们可以在lm.cfg文件中这样写:

SRC-$(CONFIG_MACRO_A)    += macro_a.c

4. 层级管理

对于复杂的工程,单个目录已经无法满足要求,这个时候,我们需要建立层级目录,例如下面:

├───build
├───subdirA
|   ├───mac_a.c
|   └───lm.cfg
├───subdirB
|   ├───mac_b.c
|   └───lm.cfg
└───lm.cfg

在最顶层的lm.cfg的内容如下:

CONFIG_MACRO_A
    choices = 0, 1, 2, 3

CONFIG_MACRO_B
    choices = [0, 100]
    depends = !CONFIG_MACRO_A


include "subdirA/lm.cfg"
include "subdirB/lm.cfg"

上面使用include关键字来包含子目录下的lm.cfg文件

5. 添加编译参数

执行lm.exe -d命令即可查看当前支持的所有参数关键字,如下:

lite-manager key: [option] += [value] [value] ...

[option]:
    SRC:                   add c or c++ source files
    SRC-$(CONFIG_XXX):     add c or c++ source files dependent on CONFIG_XXX
    PATH:                  add c or c++ include path
    PATH-$(CONFIG_XXX):    add c or c++ include path dependent on CONFIG_XXX
    DEFINE:                add c or c++ global macro define
    DEFINE-$(CONFIG_XXX):  add c or c++ global macro define dependent on CONFIG_XXX
    ASM:                   add asm source files
    ASM-$(CONFIG_XXX):     add asm source files dependent on CONFIG_XXX
    LDS:                   add build link script file
    LDS-$(CONFIG_XXX):     add build link script file dependent on CONFIG_XXX
    MCFLAG:                add machine build flag
    MCFLAG-$(CONFIG_XXX):  add machine build flag dependent on CONFIG_XXX
    ASFLAG:                add asm build flag
    ASFLAG-$(CONFIG_XXX):  add asm build flag dependent on CONFIG_XXX
    CFLAG:                 add c build flag
    CFLAG-$(CONFIG_XXX):   add c build flag dependent on CONFIG_XXX
    CPPFLAG:               add c++ build flag
    CPPFLAG-$(CONFIG_XXX): add c++ build flag dependent on CONFIG_XXX
    LDFLAG:                add link flag
    LDFLAG-$(CONFIG_XXX):  add link flag dependent on CONFIG_XXX
    LIB:                   add library
    LIB-$(CONFIG_XXX):     add library dependent on CONFIG_XXX
    LIBPATH:               add library path
    LIBPATH-$(CONFIG_XXX): add library path dependent on CONFIG_XXX

    include:               include sub lm.cfg
    include-$(CONFIG_XXX): include sub lm.cfg dependent on CONFIG_XXX

解释如下:
SRC用于添加C/C++源文件,例如SRC += abc.c
PATH用于添加头文件路径,例如PATH += ./表示将当前的目录添加到编译的头文件查找路径中
DEFINE用于添加全局宏,例如DEFINE += STM32F10X_HD表示编译的时候会添加全局宏到编译选项中
ASM用于添加汇编源文件,例如ASM += boot.s
LDS用于添加编译的链接脚本,例如LDS += stm32f10x_64KB_flash.ld
MCFLAG用于添加与机器相关的编译选项
ASFLAG用于添加汇编的编译选项
CFLAG用于添加C源文件的编译选项
CPPFLAG用于添加C++文件的编译选项
LDFLAG用于添加链接的参数,例如LDFLAG += -lnosys -Wl,--cref -Wl,--no-relax -Wl,--gc-sections LIB用于添加链接库文件
LIBPATH用于添加库文件的搜索路径

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published