C++ 空白和makefile

C++ 空白和makefile,c++,compilation,makefile,g++,gnu-make,C++,Compilation,Makefile,G++,Gnu Make,我试图将一个带有空白的项目编译到路径目录中。 这是我的Makefile: NAME = ./Release/Online_pricer SRCS = ./Online_pricer/main.cpp \ ./Online_pricer/Currency.cpp \ ./Online_pricer/Curve.cp

我试图将一个带有空白的项目编译到路径目录中。 这是我的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 $@
        @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)
我无法成功地解决带有空白的目录问题。目录名为
Files cpp

有人能帮我吗

编辑:我尝试使用一个
\
,但它不起作用。我得到了这个结果:

make: *** No rule to make target `../Files\', needed by `Release/Online_pricer'.  Stop.
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

正如Tio Pepe所建议的,您只需创建一个指向该目录的符号链接
ln-s Files\cpp Files\u cpp
(以及任何其他带有空格的文件)并在Makefile中使用
Files\u cpp
,就可以节省无数个小时的时间来尝试弄清楚
make
如何处理空格


是的,那些双反斜杠是正确的,但是以后使用
$(SRCS:.cpp=.o)
$(OBJS)
只会扭曲路径,而不考虑空格。正如所指出的,你必须对路径进行解码和编码——我在一个简单的例子中尝试过这样做,每次都失败得很惨,所以让我告诉你——你最好不用处理路径中的空格。重命名目录或使用不带空格的符号链接。

请改用8.3文件名
使用dir/x查看它是什么

我非常接近于解决这个问题。我所有的objfile、SRCFILES等都是以这样的方式正确形成的。/home/latency/projects/Function Pointers/dependens“”。dependens

当我去创建一个构建规则时,就是我遇到问题的地方

-包括$(BINPATH)/$(DEPSFILE)

我不知道在这一点上真正该做什么。
但是我正在修改一些构建规则,我让这个东西在文件名和目录中的空格中普遍使用。

问题是这里有两个反斜杠。使用一个反斜杠,因此只需../Files\cpp/在文件后使用一个反斜杠即可。它不能使用一个“\”。我把结果和我的问题连在一起。把文件放在双引号里怎么样?像
“./Files cpp/Functions.cpp”
与开始时的结果相同:
make:**无规则生成目标“./文件”,发行版/在线定价需要。停下。
好的,谢谢。我同意你的看法,我认为这是最好的办法。感谢您的帮助:)也许CMake可以更好地处理空间。我还没有亲自检查过这个工具,但它确实值得一试,即使只是为了摆脱Makefiles中那些可怕的有意义的标签。就连make的原作者都同意,回顾过去,标签是一个糟糕的选择。在GNU make 3.82中,您可以重新定义“配方介绍字符”,并使其与TAB不同。当然,这将导致您的makefile与make的任何其他版本或3.82之前的gnumake不兼容。
make: *** No rule to make target `\"/home/latency/projects/Function', needed by `/home/latency/projects/Function'.  Stop.