- 你是否讨厌过Cmake的管理十分繁杂,并且效率低下?
- 你是否因为处理C语言中众多的宏而持续痛苦?
- 你是否一直在寻找一个能够有效处理C语言中文件和宏之间的关系的工具?
使用lite-manager吧,让你的C工程项目变得神清气爽!
安装gnu-make之后,然后添加环境变量。
#include <stdio.h>
int main(void)
{
printf("hello world, lite-manager\n");
return 0;
}SRC += hello.c./lm.exe --gen Makefile --project hello执行完毕后,会在当前目录生成一个Makefile,这个Makefile就是我们编译需要使用的文件
在lm.cfg文件中添加宏,如下所示:
CONFIG_MACRO_A
choices = 0, 1, 2, 3
CONFIG_MACRO_B
choices = [0, 100]
depends = !CONFIG_MACRO_A
CONFIG_PLATFORM
choices = windows, linux, mac, unix
default = linux上面的CONFIG_MACRO_A可选择的值为0, 1, 2, 3这四个值,CONFIG_MACRO_B可选择的值为0~100,这个宏与CONFIG_MACRO_A互斥,也就是只有CONFIG_MACRO_A关闭时,CONFIG_MACRO_B才可被开启。
对于上面的宏的值,具体设置需要添加.config文件,该文件类似于Linux中的.config配置文件,这个配置文件将会设置所有宏的值,如果某些值未设置,则会使用choices中第一个值作为缺损值。例如下面.config:
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有时候我们需要利用宏来控制单个文件是否参与编译,例如当CONFIG_MACRO_A开启时,编译macro_a.c文件,当CONFIG_MACRO_A不开启时,不编译macro_a.c文件,我们可以在lm.cfg文件中这样写:
SRC-$(CONFIG_MACRO_A) += macro_a.c对于复杂的工程,单个目录已经无法满足要求,这个时候,我们需要建立层级目录,例如下面:
├───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文件
执行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用于添加库文件的搜索路径
