Как мне убедиться, что имя каталога указано в OMake? - PullRequest
0 голосов
/ 31 марта 2011

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

Я строю из 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-файла (возможно, одной строки)?

Ответы [ 2 ]

1 голос
/ 19 июня 2012

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

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

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

0 голосов
/ 01 апреля 2011

В случае, если у кого-то еще возникнет такая же проблема, я подумала, что поделюсь решением, с которым я в конечном итоге пошла, никогда не придумывая, как заключить в кавычки.Вместо того, чтобы заключать в кавычки имя с пробелами, я в итоге преобразовал путь в короткую (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))"))

Итактеперь я просто использую строку, подобную следующей для include:

INCLUDES += $(ShortDirectoryPath $(dir "$(LIBRARY_LOCATION)/Path with spaces/include"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...