使用lite-manager吧,让你的C工程项目变得神清气爽!
安装gnu-make之后,然后添加环境变量。
hello.c
源文件,内容如下:#include <stdio.h>
int main(void)
{
printf("hello world, lite-manager\n");
return 0;
}
SRC += hello.c
Makefile
文件,执行如下命令:./lm.exe --gen Makefile --project hello
执行完毕后,会在当前目录生成一个Makefile
,这个Makefile
就是我们编译需要使用的文件
make config && make
即可编译项目在lm.cfg文件中添加宏,如下所示:
CONFIG_MACRO_A
choice = 0, 1, 2, 3
CONFIG_MACRO_B
choice = [0, 100]
depend = !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配置文件,这个配置文件将会设置所有宏的值,如果某些值未设置,则会使用choice
中第一个值作为缺损值。例如下面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
有时候我们需要利用宏来控制单个文件是否参与编译,例如当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
choice = 0, 1, 2, 3
CONFIG_MACRO_B
choice = [0, 100]
depend = !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
用于添加库文件的搜索路径
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。