我是 Makefile 的新手。在尝试编写一个可以在我的大多数项目中使用且修改最少的通用 Makefile 时,我遇到了一个问题(简化如下):
我的“项目”看起来像:
proj/
src1.cpp
subdir1/
src2.cpp
Makefile
部分Makefile
:
OBJ := bin/src1.o bin/subdir1/src2.o
OBJ_DIR := bin/ bin/subdir1/
PROGRAMS := prog1
define compile_template =
$(1)/%.o: %.cpp
mkdir -p $$(@D)
$$(CXX) $$(CXXFLAGS) -c $$< -o $$@
endef
define PROGRAM_template =
$(1): $$(OBJ)
$$(CXX) $$(LDFLAGS) $$^ -o $$@ $$(LDLIBS)
endef
$(foreach odir,$(OBJ_DIR),$(eval $(call compile_template,$(odir))))
$(foreach prog,$(PROGRAMS),$(eval $(call PROGRAM_template,$(prog))))
错误是:
gmake: *** No rule to make target `bin/src1.o', needed by `proj1'. Stop.
另一个问题是,如果我只在特定机器上编译(所以我可以控制编译器、操作系统……),我应该编写自己的 Makefile 还是使用 automake 等?