2012-03-01 66 views
4

我試圖編譯一個項目與白色空間到路徑目錄。 在這裏你有我的Makefile:白色空間和生成文件

NAME =  ./Release/Online_pricer 

SRCS =  ./Online_pricer/main.cpp      \ 
       ./Online_pricer/Currency.cpp     \ 
       ./Online_pricer/Curve.cpp      \ 
       ./Online_pricer/Environment.cpp     \ 
       ./Online_pricer/My_convert.cpp     \ 
       ./Online_pricer/My_exception.cpp    \ 
       ./Online_pricer/ParserTab.cpp     \ 
       ./Online_pricer/Spot.cpp      \ 
       ./Online_pricer/Volatility.cpp     \ 
       ./Online_pricer/VolatilityCapFloor.cpp   \ 
       ./Online_pricer/VolatilitySwaption.cpp   \ 
       ../Files\\ cpp/Functions.cpp     \ 
       ../Files\\ cpp/UtilitiesWeb.cpp 

#####################################################           

OBJS     =  $(SRCS:.cpp=.o) 
CC      =  g++ 
RM      =  rm -f 
CFLAGS     =  -g -W -Wall -Werror 
INCL     =  ../Files\ .h/ 

#####################################################           

$(NAME) :  $(OBJS) 
     @$(CC) $(OBJS) -I$(INCL) $(LIB) -o $(NAME) 
     @printf "\n \033[33m[Message]\033[39m Compilation under Linux done\n" 

.cpp.o : 
     @$(CC) -I$(INCL) $(CFLAGS) -c $< -o [email protected] 
     @printf " \033[34m[Compilation]\033[39m %s\n" $< 

re  :  fclean all 

all  :  $(NAME) 

clean : 
     @$(RM) *~ $(OBJS) 
     @printf " \033[31m[Delete] \033[39m%s\n" $(OBJS) 

fclean :  clean 
     @$(RM) $(NAME) 
     @printf "\n \033[31m[Delete] \033[39m%s\n" $(NAME) 

當我啓動「重新做」,我有這樣的結果:

make: *** No rule to make target `../Files\', needed by `Release/Online_pricer'. Stop. 

我沒有成功修復與空白目錄的這個問題。目錄的名稱是Files cpp

任何人都可以幫我解決嗎?

編輯:我嘗試一個\,它不工作。我有這樣的結果:

g++: error: ../Files: No such file or directory 
g++: error: cpp/Functions.cpp: No such file or directory 
g++: error: cpp/Functions.o: No such file or directory 
g++: fatal error: no input files 
compilation terminated. 
make: *** [../Files cpp/Functions.o] Error 4 
+0

問題是你有雙反斜槓那裏。使用單個文件,只需../ Files \ cpp/ – 2012-03-01 11:00:37

+0

在文件之後只使用一個反斜槓。 – Alexander 2012-03-01 11:00:44

+0

它不適用於一個'\\'。我加入了我的問題的結果。 – 2012-03-01 11:02:30

回答

7

由於提歐佩普建議,你應該只創建一個符號鏈接到該目錄ln -s Files\ cpp Files_cpp(與空間的任何其他文件),並在你的Makefile使用Files_cpp,你將節省無數個小時試圖找出make如何處理空間。

是的,那些雙反斜槓是正確的,但以後使用$(SRCS:.cpp=.o)$(OBJS)只會在不考慮空格的情況下旋轉路徑。正如this page指出的那樣,你必須對路徑進行解碼和編碼 - 我試過這樣做的一個簡單的例子,每次都會失敗,所以讓我告訴你 - 你最好不用處理空間所有路徑。重命名該目錄或使用不帶空格的符號鏈接。

+0

是的,謝謝,我同意你的看法,我認爲這是最好的方式,謝謝你的幫助:) – 2012-03-01 13:01:26

+0

也許CMake有更好的處理空間。我還沒有檢查過這個工具,但它確實值得一試,即使只是爲了擺脫Makefiles中那些可怕的有意義的選項卡。 – Frg 2012-03-01 16:54:13

+0

甚至連make的原作者都認爲,回想起來,TAB是一個不好的選擇。在GNU make 3.82中,您可以重新定義「配方介紹人物」並使其與TAB不同。當然這會導致makefile與任何其他版本的make或GNU make在3.82之前不兼容。 – MadScientist 2012-03-02 05:45:46

0

使用8.3文件名稱,而不是使用 DIR/X,看看它是

+0

歡迎來到21世紀^^ .... – hfrmobile 2016-03-08 09:58:31

0

我超接近解決的問題。我已經將所有的OBJFILES,SRCFILES等以這種方式正確地形成了。 「/ home/latency/projects/Function Pointers/depends」「.depends」

當我去創建一個構建規則時,我遇到了問題。

-include $(BINPATH)/ $(DEPSFILE)

make: *** No rule to make target `\"/home/latency/projects/Function', needed by `/home/latency/projects/Function'. Stop. 

我不知道真正做什麼,在這一點上。 但是我正在修復一些構建規則,並且我得到了這個通用的空間文件名& dirs。