Thanks to visit codestin.com
Credit goes to github.com

Skip to content

基于lua的跨平台编译模板框架!

License

xiyoo0812/lmake

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

61 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

lmake

概述

基于lua的跨平台C/C++项目编译模板框架!

依赖

  • lua5.4
  • lstdfs, 一个基于C++17的文件系统库
  • ltemplate, 一个基于lua的文件模板生成库

机制

  • 使用lstdfs遍历项目文件
  • 在tmpl子目录下配置windows/linux/macos三个主流平台的工程模板文件
  • 使用ltemplate自动扫描配置文件生成项目文件(makefile/vcxproj)

配置

  • lmake文件: 工程根目录需要配置此文件
--lmake
--工程名
SOLUTION = "xxxx"
--lmake目录
LMAKE_DIR = "../lmake"
  • *.lmak:子项目配置文件, 此文件需要配置项目细节
  • share.lua: lmake公共配置文件, 以及参考说明, 此文件内包含lmake所有的默认选项

生成文件

  • Makefile: 在工程根目录自动生成, 用于一键编译linux/macos项目
  • *.mak: 在子项目目录自动生成, 用于编译linux/macos子项目
  • *.sln: 在工程根目录自动生成, windows下visual studio的工程文件
  • *.vcxproj : 在子项目目录自动生成, 用于管理vs2019子项目
  • *.vcxproj.filters : 在子项目目录自动生成, 用于管理vs2019子项目目录结构

配置说明

  • 参考share.lua
  • 配置文件使用lua语法
  • 标准库版本
--C标准库版本, 默认gnu99
--gnu99/gnu11/gnu17
STDC = "gnu99"
--C++标准库版本, 默认C++14
--c++11/c++14/c++17/c++20
STDCPP = "c++14"
  • GCC编译选项
FLAGS = {
    "Wno-sign-compare"
}
  • include目录(-I)
--各个平台都需要的include目录定义
INCLUDES = {
}
--LINUX需要的include目录
LINUX_INCLUDES = {
}
--DARWIN需要的include目录
DARWIN_INCLUDES = {
}
--WINDOWS需要include目录
WINDOWS_INCLUDES = {
}
  • 编译符号定义(-D)
--需要定义的选项
DEFINES = {
    "MAKE_LUA"
}
--LINUX需要定义的选项
LINUX_DEFINES = {
}
--DARWIN需要定义的选项
DARWIN_DEFINES = {
}
--WINDOWS需要定义的选项
WINDOWS_DEFINES = {
}
  • 链接库目录(-L)
--需要附加link库目录
LIBRARY_DIR = {
}
--WINDOWS需要附加link库目录
WINDOWS_LIBRARY_DIR = {
}
--LINUX需要附加link库目录
LINUX_LIBRARY_DIR = {
}
--DARWIN需要附加link库目录
DARWIN_LIBRARY_DIR = {
}
  • 需要连接的库(-l)
--需要连接的库文件
--不需要带后缀, windows会自动加上.lib后缀
LIBS = {
    "lua"
}
--WINDOWS需要连接的库文件
--windows可能会使用.a文件, 因此此处需要使用全名
WINDOWS_LIBS = {
    "libcurl.a",
    "ws2_32.lib"
}
--LINUX需要连接的库文件
LINUX_LIBS = {
}
--DARWIN需要连接的库文件
DARWIN_LIBS = {
}
  • 源文件目录
--定义项目源文件的路径
--不配置默认项目目录下的src
--如果没有配置OBJS,则会自动扫描SRC_DIR下的所有符合条件的文件作为目标
--不会递归扫描,多目录使用SUB_DIR
SRC_DIR = "lua"
  • 目标文件目录
--目标文件生成路径
--.so/.exe/.dll
DST_DIR = "bin"

--LIB文件生成路径
--.a/.lib
DST_LIB_DIR = "library"
  • 子目录定义
--子目录路径,目录基于SRC_DIR
--主要用于项目源文件分布在多个目录
SUB_DIR = {
    "zlib",
    "minizip",
    "tinyxml2",
}
--自动搜索子目录
AUTO_SUB_DIR = false
  • 目标文件定义
--用于指定目标文件,配置后不会自动扫描生成目标
--目标文件基于SRC_DIR
OBJS = {
    "onelua.c"
}
  • 需要排除编译的文件
--需要排除的源文件, 目录基于SRC_DIR
EXCLUDE_FILE = {
    "minizip/minizip.c",
    "minizip/miniunz.c",
}
  • 目标文件前缀
--linux/macos适用
--配置之后,linux/macos生成的lib/so文件会加上lib前缀
LIB_PREFIX = 1
LIB_PREFIX = nil
  • WINDOWS预编译命令
--格式: { cmd, args }
WINDOWS_PREBUILDS = {
    { "copy /y", "bin/libcurl-x64.dll $(SolutionDir)bin" }
}
  • NWINDOWS预编译命令
--格式: cmd
NWINDOWS_PREBUILDS = {
    "cp bin/libcurl-x64.dll $(SolutionDir)bin"
}
  • WINDOWS编译后命令
--格式: { cmd, args }
WINDOWS_POSTBUILDS = {
    { "cp -r", "bin/libcurl-x64.dll $(SolutionDir)bin" }
}
  • 非WINDOWS编译后命令
--格式: cmd
NWINDOWS_POSTBUILDS = {
    "cp bin/libcurl-x64.dll $(SolutionDir)bin"
}
  • 依赖项目
--用于确定编译顺序
DEPS = {
    "lua"
}
  • MIMALLOC库目录
--是否启用mimalloc库
MIMALLOC_DIR = "extend/mimalloc/mimalloc/include"
  • 分组定义
--用于生成Makefile的标签以及sln的文件夹
GROUP = "proj"

About

基于lua的跨平台编译模板框架!

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published