我有一套相对复杂的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代码(希望是一行)来确定在哪些方面引用包含空格的内容?
答案 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"))