пустое пространство и makefile - PullRequest
4 голосов
/ 01 марта 2012

Я пытаюсь скомпилировать проект с пробелами в каталоги путей.здесь у меня есть мой 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

Ответы [ 3 ]

7 голосов
/ 01 марта 2012

Как предложил Тио Пепе, вам просто нужно создать символическую ссылку на этот каталог ln -s Files\ cpp Files_cpp (и любой другой файл с пробелами) и использовать Files_cpp в вашем Makefile, и вы сэкономите бесчисленное количество часов изпытаясь понять, как make обрабатывает пробелы.

Да, эти двойные обратные слэши верны, но дальнейшее использование $(SRCS:.cpp=.o) и $(OBJS) приведет только к путям без каких-либо пробелов.Как указывает эта страница , вам придется декодировать и кодировать пути - я пытался делать это в простом примере, каждый раз терпя неудачу, поэтому позвольте мне сказать вам - вам гораздо лучше, простоне иметь дело с пробелами в путях вообще.Переименуйте каталог или используйте символическую ссылку без пробелов.

0 голосов
/ 25 августа 2014

Я очень близок к решению вопроса. У меня все мои OBJFILES, SRCFILES и т. Д. Правильно сформированы таким образом. "/ home / latency / projects / Указатели функций / зависит" ".depends"

Когда я иду, чтобы создать правило сборки, я сталкиваюсь с проблемами.

- включая $ (BINPATH) / $ (DEPSFILE)

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

Я не уверен, что на самом деле делать на этом этапе. Но я решил исправить некоторые правила сборки, и я заставил эту вещь работать универсально с пробелами в именах файлов и директорий.

0 голосов
/ 19 сентября 2013

Вместо этого используйте имя файла 8.3. Используйте dir / x, чтобы увидеть, что это такое

...