带目录的 Makefile

Makefile with directories

我的 Makefile 没问题。但是,现在我想要一个名为 "Makefile" 的文件夹和一个名为 "main" 的文件夹,其中第一个将包含我的 Makefile,第二个将包含旨在成为 main() 的文件我的我的项目,k-d GeRaF。

目前,头文件位于同一个文件夹中。该文件夹还包含 Makefile 文件夹和主文件夹。

这是我的makefile(尝试了很多组合,这是最后一次尝试):

OBJS    = main_par_auto.o
SOURCE  = ../main/main_par_auto.cpp
HEADER  =   ../Division_Euclidean_space.h   ../Find_diameter.h  ../Find_k_max.h ../Householder.h    ../IO.h ../Mean_variance.h  ../Point.h  ../Random_generator.h   ../Random_kd_forest.h   ../Tree.h   ../Auto_random_kd_forest.h
OUT     =   geraf
CXX = g++
FLAGS   =   -pthread    -std=c++0x  -DRKD_PAR   -O3 -Wall

all: $(OBJS)
    $(CXX)  $(OBJS) -o $(OUT)   $(FLAGS)

# create/compile the individual files >>separately<< 
main_par_auto.o:    main_par_auto.cpp
    $(CXX) -c   ../main/main_par_auto.cpp   $(FLAGS)

.PHONY : all
# clean house
clean:
    rm -f $(OBJS)

我收到这个错误:

make: *** No rule to make target `main_par_auto.cpp', needed by `main_par_auto.o'.  Stop.

我正在执行这个命令:make -f Makefile/Makefile_par_auto 为了编译。

请问我错过了什么?

这是大图(字面意思:))

Makefile 中的路径必须相对于工作目录(您 运行 从中创建的目录),而不是包含 Makefile 的目录。有

main_par_auto.o: main/main_par_auto.cpp
    $(CXX) -c main/main_par_auto.cpp $(FLAGS)

你应该得到预期的结果。

请注意,期望用户以这种方式调用 make 是非常不寻常的。通常,您希望在调用 make 的目录中有一个 Makefile(它可能会或可能不会继续使用其他目录中的其他 makefile)。