如何确保在OMake中引用目录名称?

时间:2011-03-30 22:06:37

标签: path whitespace omake

我有一套相对复杂的OMake文件,专为在特定平台上进行交叉编译而设计。我的源代码是C ++。

我正在从Windows构建,我需要传递给编译器包含名称中包含空格的目录。在命令行中插入编译文件的包含字符串的方式是行:

public.PREFIXED_INCLUDES = $`(addprefix $(INCLUDES_OPT), $(set $(absname $(INCLUDES))))

在OMake文件的其他位置,我有一行:

INCLUDES += $(dir "$(LIBRARY_LOCATION)/Path with spaces/include")

在命令行的中间,这会扩展为:

-IC:\Library location with spaces\Path with spaces\include

我希望它扩展为:

-I"C:\Library location with spaces\Path with spaces\include"

如果可能的话,我不想改变除“INCLUDES + = ...”之外的任何内容,尽管修改该文件中的其他内容也没问题。我不想做更改PREFIXED_INCLUDES定义的事情,就像在OMake文件套件中那样,它是SDK的一部分,可能会在我下面发生变化。这可能吗?如果是这样,我该怎么办?如果没有,我可以通过修改一些makefile代码(希望是一行)来确定在哪些方面引用包含空格的内容?

2 个答案:

答案 0 :(得分:1)

标准库函数quote在其参数周围添加了转义引号,因此它应该完成这项工作:

INCLUDES += $(quote $(dir "$(LIBRARY_LOCATION)/Path with spaces/include"))

如果需要,请参阅quote in Omake manual

答案 1 :(得分:0)

如果其他人遇到同样的问题,我想我会分享我最终使用的解决方案,从未想过如何用引号括起来。我没有在带有空格的名称周围加引号,而是将路径转换为短(8.3)版本。我是通过一个名为shorten.js的简单JScript文件和一行OMake函数完成的。

剧本:

// Get Access to the file system.
var FileSystemObject = WScript.CreateObject("Scripting.FileSystemObject");

// Get the short path.
var shortPath = FileSystemObject.GetFolder(WScript.Arguments(0)).ShortPath;

// Output short path.
WScript.StdOut.Write(shortPath);

功能:

ShortDirectoryPath(longPath) =
    return $(dir $(shell cscript /Nologo $(dir ./tools/shorten.js) "$(absname $(longPath))"))

所以现在我只使用如下所示的行:

INCLUDES += $(ShortDirectoryPath $(dir "$(LIBRARY_LOCATION)/Path with spaces/include"))