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

标签 c++ c linux makefile

<分区>

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

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

现在我已经给自己写了一个便条,一个理想的快速构建/脚手架系统应该是什么样子的,我会回过头来写一些类似的东西,除非已经有了。我宁愿投入一些努力,也不愿自己开始。

备注:

理想情况下,构建系统能够快速构建项目。

build <project-name> <language>

这将简单地制作一个带有目标的 makefile(或其他方便的东西) 指定名称。它会对其进行准备,以便输出名为项目名称的可执行文件。

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

add source <source-file>

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

add library <library-name>

我宁愿从 shell ad-hoc 调用它,让它创建它自己的脚手架,而不是抛出我自己的 makefile(或 cmakelists)。如果没有,那么为了自动完成。

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

对我来说,这似乎是启动快速 C/C++ 项目的相当直观和简单的方法。 那么有这样的事情还是我有点幻想? (诅咒你的 webdevs 和你太简单到难以置信的脚手架工具!)

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

最佳答案

简单的 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))))

关于c++ - 一次性项目的脚手架/构建系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25457066/

相关文章:

c++ - 引用限定符错误

c - kallsyms 是否具有内核函数的所有符号?

c - idiv 指令的不同结果

c - 在连接到服务器之前尝试编译客户端时出错

c++ - 如果将 char * 数组保存在 C 中的堆栈中,如何比较它

linux - 嵌套的 bash 命令引用问题

linux - 如何在内核模块中断中触发一个函数

c++ - 为什么我的程序没有捕获到取消引用空指针的异常?

c++ - 有什么正当理由不使用公共(public)虚拟方法吗?

c++ - 使用父类的变量