我试图将带有空格的项目编译到路径目录中。 在这里你有我的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)
当我启动“make re”时,我得到了这个结果:
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 :(得分:7)
正如Tio Pepe建议的那样,你应该只创建一个符号链接到该目录ln -s Files\ cpp Files_cpp
(以及任何其他带空格的文件),并在Makefile中使用Files_cpp
,你将节省无数小时试图找出make
如何处理空格。
是的,那些双重反斜杠是正确的,但后来$(SRCS:.cpp=.o)
和$(OBJS)
的使用只会在不考虑空格的情况下搞定路径。正如this page指出的那样,你必须对路径进行解码和编码 - 我试图在一个简单的例子中这样做每次都很糟糕,所以让我告诉你 - 你最好不要只是不必处理路径中的空间。重命名目录或使用不带空格的符号链接。
答案 1 :(得分:0)
请改用8.3文件名 使用dir / x来查看它是什么
答案 2 :(得分:0)
我非常接近解决问题。我的所有OBJFILES,SRCFILES等都以这样的方式正确形成。 &#34; / home / latency / projects /功能指针/取决于&#34; &#34; .depends&#34;
当我去创建构建规则时,我遇到了问题。
-include $(BINPATH)/ $(DEPSFILE)
make: *** No rule to make target `\"/home/latency/projects/Function', needed by `/home/latency/projects/Function'. Stop.
我不知道此时该做些什么。 但是我要修复一些构建规则,并且通过文件名和空格中的空格来实现这一点。显示目录。