您的小型 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'
python - DNSSEC 使用 DNSPython 对 RRSET 进行签名
python - 如何在 Mayavi2/VTK 中为绘图添加比例尺?
matlab - 从 MATLAB GUI 中发送 SIGINT
asp.net - 如何从使用 URL 路由的 ASP.NET 站点上的 URL 中删除参数?