我正在创建一个 makefile 来编译我的项目,我希望它自己创建 /obj 和 /bin 目录。
我的第一次尝试是尝试将目录视为目标,但这没有用。现在我按照 here 中解释的步骤进行操作,但出现了这个错误;
make: *** No rule to make target 'obj/main.o', needed by 'bin/main.out'. Stop.
这是我的makefile:
bin = ./bin/
src = ./src/
obj = ./obj/
CXX = g++
CCFLAGS = -Wall -g -c
CXXFLAGS = -O3
HDRS = $(src)ShallowWater.h
OBJS = $(obj)main.o $(obj)TimeIntegrate.o $(obj)derivatives.o $(obj)SetInitialConditions.o $(obj)SetBoundaryConditions.o $(obj)SetParameters.o
LIBS = -lblas -lboost_program_options -fopenmp
$(bin)main.out: $(OBJS)
@mkdir -p $(obj)
$(CXX) -o $@ $^ $(LIBS)
$(obj)%.o: $(src)%.cpp $(HDRS)
@mkdir -p $(obj)
$(CXX) $(CXXFLAGS) -o $@ -c $<
我认为这一定与以下事实有关:如果目录尚不存在,它将 obj/main.o 视为文件名,而不是文件路径。