错误:宏定义中的程序中出现了“\”

2024-05-16 07:42:20 发布

您现在位置:Python中文网/ 问答频道 /正文

在试图用scons编译this program时,我们遇到了这个错误

build/opt/zsim_harness.cpp:315:5: error: stray '\' in program
build/opt/zsim_harness.cpp:315:5: error: stray '#' in program
build/opt/zsim_harness.cpp: In function 'int main(int, char**)':
build/opt/zsim_harness.cpp:310:24: error: 'ZSIM_BUILDVERSION' was not declared in this  scope 
build/opt/zsim_harness.cpp:315:5: error: expected ')' before 'n'
build/opt/zsim_harness.cpp:315:5: error: 'ZSIM_BUILDVERSION' was not declared in this scope

出现此错误的行是

^{pr2}$

ZSIM_BUILDVERSION是在SConstruct中定义的宏

if os.path.exists(".git"):
    env.Command(versionFile, allSrcs + [".git/index", "SConstruct"],
        'echo "#define ZSIM_BUILDDATE \\""`date`\\""\\\\n#define ZSIM_BUILDVERSION \\""`python misc/gitver.py`\\""" >>' + versionFile)
else:
    env.Command(versionFile, allSrcs + ["SConstruct"],
        'echo "#define ZSIM_BUILDDATE \\""`date`\\""\\\\n#define ZSIM_BUILDVERSION \\""no git repo\\""" >>' + versionFile)

scons的版本是2.1.0 有办法解决这个问题吗?在

更新:

scons似乎会生成一个文件version.h,它看起来像

#define ZSIM_BUILDDATE "Sat Apr 19 11:07:38 CET 2014"\n#define ZSIM_BUILDVERSION "master:10:a8c417b:1fc 1+ 1- 6b4f4490"

Tags: inbuilderrorthisprogramsconscppharness
1条回答
网友
1楼 · 发布于 2024-05-16 07:42:20

问题是Python代码在这一行有太多的反斜杠:

'echo "#define ZSIM_BUILDDATE \\""`date`\\""\\\\n#define ZSIM_BUILDVERSION \\""no git repo\\""" >>' + versionFile)

它被代码所期望的少了一个程序来解析,所以结果是“\\n”在文件中以两个字符“\”和“n”结束,而不是被解析成一个换行符。代码试图避免Python插入换行符,这会破坏shell命令,而是将转义序列传递给shell,以便it更改为换行符。Python以原始字符串的形式提供了一种更简单的方法:

^{pr2}$

当它这样放置时,您可以更清楚地看到错误:shell看到转义序列'\',所以它打印一个\,后跟一个n,而不是转义序列'\n',这会导致它在文件中放入一个新行。在

相关问题 更多 >