Как использовать параметры GCC -iprefix и -iwithprefix? - PullRequest
1 голос
/ 08 ноября 2019

У меня есть приложение на c ++, которое разделено на модули. Структура каталогов для каждого модуля выглядит следующим образом:

module_a/
  export/  <-- module_a public interface
  src/     <-- module_a private source
  test/
    src/   <-- unittests for module_a

Я использую CMake для настройки зависимостей модуля и для сборки приложения. Если module_a зависит от module_b, то каталог module_b export добавляется в качестве пути включения при сборке module_a.

Итак, если есть файл module_b/export/foo.h, то module_aЗатем необходимо в исходном файле использовать #include "foo.h".

Я ищу способ сделать так, чтобы имя модуля было частью директивы include. Поэтому для приведенного выше примера я хочу (должен) написать #include "module_b/foo.h".

Это можно сделать с помощью опций GCC -iprefix и -iwithprefix? Я искал примеры использования, но все, что я могу найти, это копии и ссылки на руководство GCC, которое, я думаю, не очень хорошо объясняет это.

Я пытался использовать его таким образом:

$ find -type f
./src
./src/main.cc
./export
./export/bar.h

$ g++ -iprefix foo/ -iwithprefix export/ src/main.cc
src/main.cc:1:10: fatal error: foo/bar.h: No such file or directory
    1 | #include "foo/bar.h"
      |          ^~~~~~~~~~~
compilation terminated.

$ gcc --version
gcc (Debian 9.2.1-17) 9.2.1 20191102

Но, как видите, это не работает. Как использовать -iprefix и -iwithprefix?

Кроме того, у кого-нибудь есть другое решение моей проблемы? Я немного обеспокоен тем, что IDE и другие компиляторы могут не понимать -iprefix и -iwithprefix, поэтому любые другие решения также приветствуются.

Редактировать: после публикации этого вопроса я сразу понял, что, возможно, -iprefix foo/ -iwithprefix barпросто необычный способ написания -I foo/bar. Однако, я проверил это, и я все еще не заставил это работать. Поэтому было бы хорошо, если бы кто-то мог объяснить, как работают эти опции, даже если они не помогут мне в моей проблеме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...