0

我有一套相对复杂的 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代码(希望是一行)来引用其中包含空格的内容?

4

2 回答 2

1

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

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

如果需要,请参阅quoteOmake 手册

于 2012-06-19T15:47:51.297 回答
0

万一其他人遇到同样的问题,我想我会分享我最终使用的解决方案,但我从未弄清楚如何用引号括起来。我最终将路径转换为短(8.3)版本,而不是在名称周围加上空格并用引号引起来。我是通过一个简单的 JScript 文件来实现的,该文件名为 short.js 和一个单行 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"))
于 2011-03-31T21:49:11.013 回答