WINAVR找不到文件中包含有空格的路径(WINAVR not finding file in in

2019-09-17 12:32发布

当我提供了EXTRAINCDIRS的路径(在Makefile中,继WINAVR提供的样品)没有空格,编译器能够找到我的头文件,但是当我使用包含空格的路径(用引号括起来,作为评论Makefile文件直接),它提出: error: No such file or directory

"d:/dev/avr/atmega/shared/" # will search files in this dir
"d:/dev/avr/atmega/sha ed/" # will not search this dir for files

我的意思是,评论说:

# List any extra directories to look for include files here.
#     Each directory must be seperated by a space.
#     Use forward slashes for directory separators.
#     For a directory that has spaces, enclose it in quotes.

任何想法如何让WINAVR正确处理呢?

我使用的程序员在Windows XP中的记事本(WINAVR)。 下面是命令行命令:

avr-g++ -c -mmcu=atmega328p -I. -gdwarf-2 -DF_CPU=UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=./main.lst -I"d:/dev/avr/atmega/shared/" -I"d:/dev/avr/atmega/sha -Ied/" -std=gnu99 -MMD -MP -MF .dep/main.o.d main.c -o main.o

Answer 1:

正在发生的事情是,我猜别的地方makefile中有,做像下面的一行:

INCLUDES = $(addprefix -I, $(INCDIRS))

当发生这种情况addprefix对待任何空格作为分隔符到下一个变量$(INCDIRS)变量,将添加-I那里。 你可以做的是使用一个特殊的字符空格说“\\”,然后生成命令之前调用的替代功能resubstitute空间。 像下面的例子:

SPACE = \\
INCDIRS = /home/posey/test$(SPACE)dir

INCLUDES = $(addprefix -I, $(INCDIRS))
REAL_INCLUDES = $(subst $(SPACE), ,$(INCLUDES))

.PHONY : all

all:
    $(info $(REAL_INCLUDES))

如果这是没有意义的,你可以张贴整个makefile文件,我们可以告诉你到底发生了什么事。 一旦空间已被取代返回到变量,你无法通过,如果没有相同的行为发生,空间分隔符的工作,进一步使功能运行。



文章来源: WINAVR not finding file in include path with whitespace