首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WINAVR未在包含空格的包含路径中找到文件

WINAVR未在包含空格的包含路径中找到文件
EN

Stack Overflow用户
提问于 2012-05-26 08:36:18
回答 1查看 1.2K关注 0票数 2

当我为EXTRAINCDIRS (在Makefile中,遵循WINAVR提供的示例)提供一个不带空格的路径时,编译器能够找到我的头文件,但是当我使用一个包含空格(用引号括起来,作为Makefile中的注释)的路径时,它会引发:error: No such file or directory

代码语言:javascript
复制
"d:/dev/avr/atmega/shared/" # will search files in this dir
"d:/dev/avr/atmega/sha ed/" # will not search this dir for files

我是说,评论说:

代码语言:javascript
复制
# 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)。以下是命令行命令:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-26 22:38:45

发生的情况是,我猜在makefile中的其他地方有一行代码,它的作用类似于:

代码语言:javascript
复制
INCLUDES = $(addprefix -I, $(INCDIRS))

当发生这种情况时,addprefix将$(INCDIRS)变量中的任何空格视为下一个变量的分隔符,并将-I添加到其中。您可以做的是使用一个特殊的空格字符,比如'\‘,然后在生成命令之前,调用一个替换函数来重新替换空格。类似于下面的示例:

代码语言:javascript
复制
SPACE = \\
INCDIRS = /home/posey/test$(SPACE)dir

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

.PHONY : all

all:
    $(info $(REAL_INCLUDES))

如果这没有意义,你可以发布整个makefile,我们可以向你展示到底发生了什么。一旦将空格替换回变量中,就不能在不发生相同行为的情况下,通过任何使用空格分隔符的make函数来运行它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10762766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档