Как указать путь включения удаленного препроцессора, например 192.0.2.17://usr/include

Можно ли указать путь включения C/C++ к удаленному серверу препроцессора?

Дело здесь в том, чтобы иметь центральное расположение для файлов заголовков. Это делает обновления, согласованность версий и множество других вещей намного лучше, чем люди, запускающие все волей-неволей, включая разные версии вещей.

Минимальный, полный и проверяемый пример

Типичное включение. В Linux по умолчанию будет /usr/include/ или подобное; в Windows VS в место, указанное в переменной $(IncludePath).

#include <iostream>
int main() {
    std::cout << "hello, world" << std::endl;
    return 0;
}

Теперь представьте, что мы установили наш путь включения следующим образом:

C_INCLUDE_PATH=192.0.2.17://usr/include;/usr/include;

Приведенное выше сначала проверит удаленный сервер по адресу 192.0.2.17, чтобы увидеть, существует ли библиотека iostream. В противном случае будет проверено /usr/include.

Это немного растянуто, чтобы проиллюстрировать суть:

#include <192.0.2.17://iostream>

int main() {

    std::cout << "hello, world" << std::endl;

}

Спасибо, Кит :^)


person kmiklas    schedule 13.02.2019    source источник
comment
Я думаю, вам нужно как-то смонтировать удаленный диск. sshfs может работать на большинстве Linux-машин, а какой-то общий ресурс NFS или SAMBA может работать на Windows. Затем вы должны установить директиву INCLUDE_PATH так, чтобы она указывала на общий диск.   -  person Ross Rogers    schedule 13.02.2019
comment
Пожалуйста, просмотрите критерии и объясните. Это хорошо продуманный вопрос. stackoverflow.com/help/привилегии/голосование-вниз   -  person kmiklas    schedule 13.02.2019
comment
Почему бы просто не использовать git?   -  person Jesper Juhl    schedule 13.02.2019
comment
@JesperJuhl git потребует, чтобы каждый пользователь клонировал репозиторий и имел отдельную локальную копию, верно?   -  person kmiklas    schedule 13.02.2019
comment
@kmiklas Да. Но вы все равно хотите контролировать версии, в любом случае, так почему это проблема?   -  person Jesper Juhl    schedule 13.02.2019
comment
@JesperJuhl хммм....... можете ли вы добавить это как настоящий ответ?   -  person kmiklas    schedule 13.02.2019
comment
@kmiklas Готово..   -  person Jesper Juhl    schedule 13.02.2019
comment
Как бы то ни было, то, что вы предлагаете, мне кажется, выходит за рамки языка С++. Это действительно расширение того, как система хост интерпретирует файловые системы и имена файлов.   -  person Andrew Henle    schedule 13.02.2019


Ответы (3)


Поскольку вам в любом случае нужен контроль версий, вы можете просто использовать git (как и тысячи других проектов ). Таким образом, у каждого пользователя есть локальный клон всего необходимого.

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

person Jesper Juhl    schedule 13.02.2019

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

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

person dbush    schedule 13.02.2019

Я бы не стал помещать ссылки на это в такой код, и, как сказал dbush, вам придется улучшить препроцессор.

Но в системе Make могут быть милые способы сделать это. То есть, если вы используете Make (например), вы можете добавить шаги в Makefile, которые вызывают обновление данных.

Тем не менее, я бы предположил, что это НЕПРАВИЛЬНО, потому что не только включаемые файлы должны быть свежими. Если включение изменилось, связанный с ним код, вероятно, также изменился, и вам также понадобятся эти изменения. Ваши волшебные вещи #include не сделают ничего, чтобы убедиться, что у людей есть правильный код / ​​библиотеки, для которых предназначены включения.

Я не уверен, почему правильное использование репозиториев исходного кода еще не справилось с этим за вас.

person Joseph Larson    schedule 13.02.2019