【发布时间】:2011-06-28 12:24:06
【问题描述】:
您的小型 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 将 src/ 目录中的所有 .cc 文件构建到 build/ 目录中的 .o 文件中,然后将它们链接到父目录中。
你会做什么不同的事情?
【问题讨论】:
-
我会使用 cmake。一旦你有几个头文件,直接维护一个 Makefile 就根本不会扩大。自动工具方式笨重,需要太多步骤。 Cmake 是一个真正的万能工具。
-
我肯定会使用 cmake 处理超过 10 个文件;对于比这更小的东西,它似乎有点沉重。
-
它出奇地不重,而且它确实只是做了必要的工作量。在第一次调用之后,您只需继续调用
make,即使您更改了 CMake 文件——它找出依赖关系的方式有很多魔力 :-)(但是是的,它确实创建了一个目录对于太小的情况,您可能会发现太多的结构。) -
这个问题有什么意义? “我给你看我的,如果你给我看你的”?你有什么特别的问题吗?
-
@eriktous 我正在寻找一个体面的解决方案来解决构建一个充满 C 文件的目录的问题。我觉得它可以做得比我做的更好。
标签: makefile