Как передать флаги make, хранящиеся в текстовых файлах, в командной строке? - PullRequest
0 голосов
/ 24 февраля 2019

У меня есть текстовый файл OPTIONS.txt, в котором хранятся все флаги Makefile:

arg1=foo arg2="-foo -bar"

Я хочу передать все флаги в этом файле в make.Однако

make `cat OPTIONS.txt`

завершается с make: invalid option -- 'a'.Кажется, что shell интерпретирует это как:

make arg1=foo arg2="-foo -bar"
     ^argv[1] ^argv[2]   ^argv[3]

Есть ли способ сделать это интерпретировать как:

make arg1=foo arg2="-foo -bar"
     ^argv[1] ^--------argv[2]

Ответы [ 2 ]

0 голосов
/ 24 февраля 2019

Поскольку вы управляете файлом параметров, сохраняйте параметры по одному в строке:

arg1=foo
arg2="-foo -bar"

Затем в оболочке вы будете считывать файл в массив, по одному элементу в строке:

readarray -t opts < OPTIONS.txt

Теперь вы можете вызывать make и сохранять параметры целыми:

make "${opts[@]}"
0 голосов
/ 24 февраля 2019

Если вы хотите, чтобы оболочка интерпретировала кавычки после расширения обратным тэгом, вам нужно использовать eval, например:

eval make `cat OPTIONS.txt`

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

eval make `cat OPTIONS.txt` arg4="one two"

выдаст ошибку.Вам бы пришлось заключить в кавычки arg4, что-то вроде этого:

eval make `cat OPTIONS.txt` arg4='"one two"'

В общем, сложно делать такие вещи из командной строки, вне сценариев.

ETA

Реальная проблема заключается в том, что у нас нет набора требований. Почему вы хотите поместить их в файл, и какие вещи вы добавляете;они только присваивают переменные make-файла, или здесь также есть другие опции make, такие как -k или аналогичные?

ЕСЛИ OP контролирует (может изменять) формат файла И файл содержит только используемое содержимоеВ случае make AND OP не заботится о том, чтобы переменные были назначениями командной строки по сравнению с обычными назначениями И есть только назначения переменных, а не другие параметры, тогда они могут просто (а) поместить каждое назначение переменной в отдельной строке, (b)удалите все кавычки и (c) используйте include OPTIONS.txt внутри make-файла, чтобы «импортировать» их.

...