Как убедиться, что имя каталога в OMake заключено в кавычки?

У меня есть относительно сложный набор файлов OMake, предназначенных для кросс-компиляции на определенной платформе. Мой исходник на С++.

Я строю из Windows, и мне нужно передать компилятору включаемые каталоги, в именах которых есть пробелы. Строка include, которая вставляется в командную строку для компиляции файлов, создается строкой:

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, который может измениться под моим руководством. Это возможно? Если да, то как я могу это сделать? Если нет, то как я могу убедиться, что включения с пробелами в них заключены в кавычки, изменив небольшой код make-файла (надеюсь, одну строку)?


person Edward D. Baum    schedule 30.03.2011    source источник


Ответы (2)


Стандартная библиотечная функция quote добавляет экранированные кавычки вокруг своего аргумента, поэтому она должна выполнять свою работу:

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

При необходимости см. quote в руководстве Omake.

person Mander    schedule 19.06.2012

На случай, если у кого-то еще возникнет такая же проблема, я подумал, что поделюсь решением, которое я в конечном итоге выбрал, так и не выяснив, как окружить кавычками. Вместо того, чтобы заключать имя в кавычки с пробелами, я в итоге преобразовал путь в короткую (8.3) версию. Я сделал это с помощью простого файла JScript с именем shorten.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"))
person Edward D. Baum    schedule 31.03.2011