2015-04-25 195 views
0

我的Makefile很好。但是,現在我想要一個名爲「Makefile」的文件夾和一個名爲「main」的文件夾,其中第一個文件夾包含我的Makefiles,第二個文件夾包含我的項目的文件main(),k-d GeRaF。Makefile與目錄

現在,頭文件位於同一個文件夾中。該文件夾還包含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

+0

你試過'main_par_auto.o:../main/main_par_auto.cpp'嗎? – jadhachem

+0

是@jadhachem。 'make:***沒有規則可以讓'main_par_auto.o'所需的''/ main/main_par_auto.cpp \'成爲目標。 Stop.' – gsamaras

+0

相對於工作目錄或生成文件路徑的路徑是什麼? – Wintermute

回答

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)。

+0

我打算在調用目錄中做一個make,它將從Makefile文件夾中調用相應的Makefile。我現在會測試。 – gsamaras