makefile - 规范 'simple project' 生成文件

您的小型 C/C++ 项目已经到了无法将所有代码放在一个文件中的地步。你想拆分几个组件。所以你做了一个src/目录,然后……你必须写一个真正的 Makefile。不止 hello: hello.o .呃……是吗$@$<$^ ?废话。你不记得(我从来不记得)。

您是否有一个“一刀切”的简单 Makefile 可以处理简单的源代码树?如果有,里面有什么,为什么?我正在寻找最小、最简单的 Makefile,它可以很好地编译一个充满 C 文件的目录,而无需在每次添加文件时都编辑 Makefile。这是我到目前为止所拥有的:

CXX = clang++
CXXFLAGS = ...
LDFLAGS = ...
EXENAME = main

SRCS = $(wildcard src/*.cc)
OBJS = $(patsubst src%.cc,build%.o, $(SRCS))

all: $(EXENAME)

build/%.o: src/%.cc
    @mkdir -p $(dir $@)
    $(CXX) -c -o $@ $^ $(CXXFLAGS)

$(EXENAME): $(OBJS)
    $(CXX) -o $@ $^ $(LDFLAGS) 

clean:
    rm -rf $(EXENAME) build/

这个 Makefile 构建了所有 .cc src/ 中的文件目录进入 .o build/ 中的文件目录,然后将它们链接到父目录。

您会采取哪些不同的做法?

最佳答案

我会重新考虑您不提供明确来源列表的决定——我认为从长远来看这可能会给您带来麻烦。但如果那是你的决定,那么这个 makefile 非常好。

%.o规则我会使用 $<而不是 $^ ,以便稍后您可以添加依赖项,例如

build/foo.o: bar.h

准备就绪后,您可以查看 Advanced Auto-Dependency Generation .

关于makefile - 规范 'simple project' 生成文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6500790/

相关文章:

facebook - 如何在 Facebook 上为我的应用程序上传没有黑色颗粒状边框的图标?

django - 需要一个用于 Django 的轻量级独立 Web 服务器

ruby-on-rails - 数组的未定义方法 `serializable_hash'

memory - 可寻址和可移动的最小存储单元

python - DNSSEC 使用 DNSPython 对 RRSET 进行签名

python - 如何在 Mayavi2/VTK 中为绘图添加比例尺?

matlab - 从 MATLAB GUI 中发送 SIGINT

asp.net - 如何从使用 URL 路由的 ASP.NET 站点上的 URL 中删除参数?

python - 如何使用 tripit API 制作独立工具?

domain-driven-design - 如何更新聚合内的实体