在linux下面编译 c 项目编译其实很简单, 无外乎 编译工具, 源码, 编译依赖, 编译选项 这几项.
如今大多数我们情况, 我们都是依赖于Make工具, 包括cmake工具也是为项目自动构建一个makefile管理结构.
但是make是依赖于系统 shell 来执行操作, shell语法有点死板, 不容易调试. cmake 有大量的新的 API 命令, 对新手不是很有好.
最近在网上以外看到一个项目工具, scons, 该工具是 python 实现的, 完美继承 python 语法中对文件和字符串的便捷操作的有点.
具体情况大家可以在官网进行参考.
下面我给大家一个参考样例, 供大家上手.
import glob
flags = '-Wall -g'
inc_path = ["inc", "media"]
# 使用 python 的 glob 库获取media目录下的所有源码
media_fns = glob.glob('media/*.cpp')+glob.glob('media/*.c')
# ------------ * --------------
# Program 产生一条对 'server' 程序 的 编译规则,
# media_fns+['main.cpp'] 给出编译 server 需要的所有源码
# LIBS: 相当于给 server 目标添加 一个 gcc的指定 -l 选项的列表
# LIBPATH: 相当于给 server 目标添加 一个 gcc的指定 -L 选项的列表
# CCFLAGS: 编译器的编译选项
# CPPPATH: 头文件的路径
# ------------ * --------------
Program('server', media_fns+['main.cpp'],
LIBS = [ 'zlog'],
LIBPATH=['./lib'],
CCFLAGS =flags,
CPPPATH = inc_path
)
执行:
scons -c # 相当于 make clean
scons -j 16 # 相当于 make -j16 ,启动16个不相干线程并行编译
当然scons除了 Program 命令 来编译 c/c++ 外, 还有一些其他命令, 比如工程的安装 和 JAVA 工程的编译.
网上有很多中文资料讲解 scons的使用了, 如果大家需要, 后面有时间可以给大家翻译下 scons的 官方文档, 供大家学习和产考.