将scons生成过程包装到Makefile中

将scons生成过程包装到Makefile中,makefile,scons,Makefile,Scons,我已经写了一个sconsbuild chain form一个小小的C项目,但是我担心用户不会喜欢被告知“你应该先安装scons。此外,它真的很酷!”(尤其是我的教授,因为他有点像老守卫) 有没有一种方法可以设置一个打包SCON的Makefile,而不需要将其安装在目标系统上?在前一段时间寻找了这样的解决方案后,我最终为此编写了一个Makefile 因为SCons也是一个drop-in-userspace包SCons-local(请参阅),所以可以获取并运行它。这里是我的Makefile的一个经过

我已经写了一个
scons
build chain form一个小小的C项目,但是我担心用户不会喜欢被告知“你应该先安装scons。此外,它真的很酷!”(尤其是我的教授,因为他有点像老守卫)


有没有一种方法可以设置一个打包SCON的Makefile,而不需要将其安装在目标系统上?

在前一段时间寻找了这样的解决方案后,我最终为此编写了一个Makefile

因为SCons也是一个drop-in-userspace包
SCons-local
(请参阅),所以可以获取并运行它。这里是我的Makefile的一个经过剖析和注释的版本,我也将其作为一个文件上传

↑ 默认操作取决于
scons
是否可用,只需运行scons命令(稍后在脚本中设置)(
@
符号阻止make打印命令)

↑ 设置获取tarball的规则,并将其解压缩到
scons local
目录中

NATIVE_SCONS=$(strip $(shell which scons 2>/dev/null))

ifeq ($(NATIVE_SCONS),)
SCONS_EXE=python2 ./scons-local/scons.py
get_scons: scons-local
    @echo "Couldn't find an installation of SCons, using a local copy"
else
SCONS_EXE=$(NATIVE_SCONS)
get_scons:
    @echo "Found SCons installation at $(SCONS_EXE)"
endif
↑ 在搜索路径中查找
scons
可执行文件(使用
which
命令):如果可用,设置
get scons
目标,以便在可用时简单打印。如果不可用,则创建
get scons
目标,指示其依赖于前面定义的
scons local
目标

clean:
    $(SCONS_EXE) -c
    rm -rf scons-local
    rm -f scons-local-*.tar.gz

.PHONY: all clean get_scons
↑ 最后,设置
clean
目标,该目标将委托给SCON并随后删除本地安装。
.PHONY
规则告诉
make
以下规则与正在创建的文件不对应

此时,可以添加更多此类代理规则:

mytarget: get_scons
    @$(SCONS_EXE) mytarget
它将调用具有相应目标的SCON

希望这是有用的,如果有什么不对劲,请随时纠正我(我实际上不是Makefile专家,我正试图通过使用SCons来避免成为专家:p)

clean:
    $(SCONS_EXE) -c
    rm -rf scons-local
    rm -f scons-local-*.tar.gz

.PHONY: all clean get_scons
mytarget: get_scons
    @$(SCONS_EXE) mytarget