带有目录的Makefile

时间:2015-04-25 21:29:34

标签: c++ makefile directory

我的Makefile很好。但是,现在我想要一个名为“Makefile”的文件夹和一个名为“main”的文件夹,其中第一个文件夹包含我的Makefile,第二个文件夹包含我的项目的main()文件, kd 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以便编译。

我错过了什么?

这是大局(字面意思:)) enter image description here

1 个答案:

答案 0 :(得分:1)

Makefile中的路径必须相对于工作目录(运行make的目录),而不是相对于包含Makefile的目录。与

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

你应该得到预期的结果。

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