一次性项目的脚手架/构建系统

时间:2014-08-22 23:48:19

标签: c++ c linux makefile

这是半超级用户的问题,但我认为它更适合。

我大部分时间都在使用shell,因此IDE不适合我的工作流程。 然而,我更喜欢一个整齐的项目,而不是一个无用的一次性旅行。我发现自己花费太多时间来编写makefile(即使是cmakelists也会花费太多的时间,有时感觉不直观)。

现在我已经给自己写了一个注释,理想的快速构建/脚手架系统会起什么作用,我会来写一些类似的东西,除非已有。我宁愿花一点力气开始自己的。

注意:

理想情况下,构建系统可以快速构建项目。

build <project-name> <language>

这只会使用目标制作一个makefile(或其他方便的东西) 指定的名称。它准备它,因此它输出一个名为project-name的可执行文件。

这将规范要编译的源文件:

add source <source-file>

这将规范任何必要的库链接:

add library <library-name>

我更喜欢从shell ad-hoc中调用它,让它创建自己的脚手架,而不是自己制作makefile(或cmakelists)。如果没有,那么为了自动完成。

请记住,除了快速实验或演示之外,这绝不是意味着什么 - 当我不想用手动搭建项目的行为让别人(或我自己)厌烦时。

对我而言,这似乎是一种启动快速C / C ++项目的直观而简单的方法。 那么有这样的事情还是我幻想一下? (诅咒你的webdevs和你太简单的脚手架工具!)

请为快速的C / C ++项目建议一个固定的构建/脚手架系统。

1 个答案:

答案 0 :(得分:2)

简单的GNU Makefile,我用于单一来源编程迷你项目,将所有源文件转换为单个二进制makefile非常简单。

CSRC = $(wildcard *.c)
CPPSRC = $(wildcard *.cpp)

CLEANF :=

all:

CFLAGS ?= -O2 -g -fomit-frame-pointer -Wall -Wextra

ifeq ($(V),)
CCS=@echo "   CC " $@ && $(CC)
CXXS=@echo "  CXX " $@ && $(CXX)
else
CCS=$(CC)
CXXS=$(CXX)
endif

CCMD = $$(CCS) $$(CFLAGS) $$< -o $$@
CPPCMD = $$(CXXS) $$(CFLAGS) $$< -o $$@

define MAKEPROG

$(basename $(1)): $(1)
    $(2) $$($(basename $(1))_CFLAGS)

all: $(basename $(1))

CLEANF += $(basename $(1))

endef

clean:
    @echo "  RM " $@ && $(RM) $(CLEANF)

$(foreach SRC,$(CSRC),\
    $(eval $(call MAKEPROG,$(SRC),$(CCMD))))

$(foreach SRC,$(CPPSRC),\
    $(eval $(call MAKEPROG,$(SRC),$(CPPCMD))))