在Wesnoth构建的这段代码中,$ TESTFILE变量被替换为给定的路径。但是在Windows上路径变得无效,因为默认情况下,SCons subst()
不会在路径中转义反斜杠。有没有办法做到这一点 - 获取带有转义反斜杠的SCons File节点的绝对文件名?或者在替换时逃避反斜杠?
test_program = '''
#include <SDL_mixer.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
Mix_Music* music = Mix_LoadMUS("$TESTFILE");
if (music == NULL) {
exit(1);
}
exit(0);
}
\n
'''
print Environment(TESTFILE = File("data/core/music/main_menu.ogg").rfile().abspath). \
subst(test_program)
输出:
#include <SDL_mixer.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
Mix_Music* music = Mix_LoadMUS("E:\wesnoth\scons\data\core\music\main_menu.ogg");
if (music == NULL) {
exit(1);
}
exit(0);
}
答案 0 :(得分:0)
来自python 2.7 docs的os.path.normpath怎么样??
os.path.normpath(path)
通过折叠冗余来规范化路径名 分隔符和上级引用,以便A // B,A / B /,A /./ B和 A / foo /../ B都变为A / B.这个字符串操作可能会改变 包含符号链接的路径的含义。在Windows上,它 将正斜杠转换为反斜杠。要规范化案例,请使用 normcase()。
答案 1 :(得分:0)
克隆Wesnoth repo并检查实际的构建文件后,我发现您描述的问题发生在配置环境中。这在原始问题中并未明确,并且我的第一次尝试答案无用(使用SConf.SConfBase.TryRun
构建器,请参阅历史记录)。
据我所知,SCons目前没有内置选项来处理你正在寻找的双反斜杠。我现在能想到的最简洁的方法是克隆方法TryRunWithArgs
(例如将其命名为AddTest()
),使其接受其他程序参数,并使用{{1}}将其添加到配置上下文中然后重写测试程序,使其接受文件名作为第一个参数。