2016-03-04 71 views
-1

我想創建一個嵌套的輸出文件夾結構來構建一個開源庫。但是,我從來沒有使用過makefile,並且有一些基本的問題。與生成文件嵌套的輸出文件夾

閱讀了一些文檔後,我設法創建了嵌套文件夾和所有正確編譯的目標文件。但是,仍然有一些我無法弄清楚的錯誤。

一個簡單的makefile樣品(由原來的makefile修改):

SRC  = ../src/lib 
OUT  = rtklib_post_proc 
LIB  = $(OUT)/lib 

OPTS = -DTRACE -DENAGLO -DENAQZS -DENAGAL -DNFREQ=3 

# For using lapack and blas 
CFLAGS = -Wall -O3 -ansi -pedantic -Wno-unused-but-set-variable -I$(SRC) -DLAPACK $(OPTS) 
LDLIBS = -lm -lrt -llapack -lblas 

all  : rnx2rtkp 
rnx2rtkp : rnx2rtkp.o postpos.o 

rnx2rtkp.o : ../src/rnx2rtkp.c 
    mkdir -p $(OUT) 
    $(CC) -c $(CFLAGS) ../src/rnx2rtkp.c -o $(OUT)/[email protected] 
postpos.o : $(SRC)/postpos.c 
    mkdir -p $(LIB) 
    $(CC) -c $(CFLAGS) $(SRC)/postpos.c -o $(LIB)/[email protected] 

$(LIB)/rnx2rtkp.o : $(SRC)/rtklib.h 
$(LIB)/postpos.o : $(SRC)/rtklib.h 

輸出與錯誤:

mkdir -p rtklib_post_proc 
cc -c -Wall -O3 -ansi -pedantic -Wno-unused-but-set-variable -I../src/lib -DLAPACK -DTRACE -DENAGLO -DENAQZS -DENAGAL -DNFREQ=3 ../src/rnx2rtkp.c -o rtklib_post_proc/rnx2rtkp.o 
mkdir -p rtklib_post_proc/lib 
cc -c -Wall -O3 -ansi -pedantic -Wno-unused-but-set-variable -I../src/lib -DLAPACK -DTRACE -DENAGLO -DENAQZS -DENAGAL -DNFREQ=3 ../src/lib/postpos.c -o rtklib_post_proc/lib/postpos.o 
cc rnx2rtkp.o postpos.o -lm -lrt -llapack -lblas -o rnx2rtkp 
cc: error: rnx2rtkp.o: No such file or directory 
cc: error: postpos.o: No such file or directory 
make: *** [rnx2rtkp] Error 1 

任何指導來解決,這將是真正偉大的。

更新具有小的變化:

結果:

mkdir -p rtklib_post_proc 
cc -c -Wall -O3 -ansi -pedantic -Wno-unused-but-set-variable -I../src/lib -DLAPACK -DTRACE -DENAGLO -DENAQZS -DENAGAL -DNFREQ=3 ../src/rnx2rtkp.c -o rtklib_post_proc/rnx2rtkp.o 
cc rnx2rtkp.o rtklib_post_proc/rnx2rtkp.o rtklib_post_proc/lib/postpos.o -lm -lrt -llapack -lblas -o rnx2rtkp 
cc: error: rnx2rtkp.o: No such file or directory 
cc: error: rtklib_post_proc/lib/postpos.o: No such file or directory 
make: *** [rnx2rtkp] Error 1 

更新2:

all  : $(OUT)/rnx2rtkp 

結果:

make: *** No rule to make target `rtklib_post_proc/rnx2rtkp', needed by `all'. Stop. 
+0

'rnx2rtkp:rnx2rtkp.o postpos.o'。依賴關係是錯誤的。它們需要以'$(OUT)/'和'$(LIB)/'作爲前綴,因爲這是構建對象的地方。 – kaylum

+0

更新了問題,對不起,沒有工作,我肯定缺少一些東西。你能不能把它作爲答案加上一些細節。謝謝。 – Indigo

+1

很難理解爲什麼有人會投這個問題,也沒有任何解釋。這只是令人沮喪。 – Indigo

回答

0
rnx2rtkp.o : ../src/rnx2rtkp.c 

該行表示,在rnx2rtkp.o同一目錄下生成文件取決於源文件。這不是正確的位置!

此外,添加所有依賴文件在同一行:

嘗試:

$(OUT)/rnx2rtkp.o : ../src/rnx2rtkp.c $(SRC)/rtklib.h 

,並刪除下面的依賴$(LIB)/rnx2rtkp.o : $(SRC)/rtklib.h

您還需要更新中間依賴性:

那麼對於postpos這樣做。請務必在使用$LIB$OUT時保持一致。

+0

謝謝,我厭倦了這一切,沒有錯誤的一切工作。但最後,它沒有生成可執行文件。我將繼續檢查GNU make手冊,看看是否有什麼我做錯了。 – Indigo

+1

在你的問題中,你沒有包含任何命令將對象文件鏈接到可執行文件中。也許這就是你缺少的東西? –

+0

謝謝,我糾正它,現在它正在工作。 – Indigo