Как разделить аргументы cl :: opt между проходами? - PullRequest
0 голосов
/ 02 ноября 2019

Я определил параметр cl :: opt в одном из моих проходов.

cl::opt<std::string> input("input", cl::init(""), cl::desc("the input file"), cl::value_desc("the input file"));

Интересно, как поделиться этим параметром с другим проходом? Я попытался переместить его в файл заголовка и разрешить другому проходу включить его, но он сообщил об ошибке множественного определения.

1 Ответ

2 голосов
/ 02 ноября 2019

Вам необходимо сделать хранилище параметра внешним.

В некоторых файлах общего заголовка объявить переменную:

extern std::string input;

И определить ее и сам параметр только в одном из ваших источников:

std::string input;
cl::opt<std::string, true> inputFlag("input", cl::init(""), cl::desc("the input file"), cl::value_desc("the input file"), cl::location(input));

Примечание добавил аргумент cl::location(input), который указывает cl::opt сохранить значение параметра в переменной input. Теперь вы можете получить доступ к значению input s из разных TU, но иметь только одно определение.

См. Раздел Внутреннее и внешнее хранилище .

...