Объединение двух каталогов в один виртуальный каталог для компиляции / сглаживания каталогов include

#c

#c

Вопрос:

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

Исходный код является абстрактным в том смысле, что некоторые заголовки отсутствуют. Например, общий файл Application.cpp может включать файл с именем gui/MainWindow.h , который не существует в общем каталоге, но существует в исходном каталоге исполняемого файла. Или это может включать файл с именем gui/Local.h , который существует в общем каталоге.

По сути, мне нужно, чтобы gui путь представлял собой комбинацию двух местоположений.

В unix я делал это раньше, просто устанавливая серию ссылок на файлы, но в этом проекте теперь в качестве целевого объекта используется Windows (Visual Studio). Кроме того, я знаю, как это сделать, используя структуру общих каталогов и установив переключатели включения компилятора, но я надеюсь, что есть более простой способ.

Есть идеи?


Я использую CMake для генерации сборки и GCC и Visual Studio в качестве компиляторов.

Я уже рассматривал определение каталога для препроцессора, но #include директива, к сожалению, не может объединить несколько токенов для создания имени файла. Работает одно имя, и это может быть вариантом, когда cmake выдает макросы для всех общих имен файлов.

Ответ №1:

Я действительно думаю, что самое простое решение — использовать include paths — иметь разные пути для разных проектов. Посмотрите на таблицы свойств, чтобы поделиться настройками между проектами и значительно упростить управление.

Если вы используете ссылки на файлы в unix, вы могли бы сделать то же самое в Windows с символическими ссылками.

Комментарии:

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

2. Я хотел бы надеяться, что вы могли бы сохранить структуру каталогов прежней и использовать включаемые пути для включения нужных каталогов таким же образом, как вы смотрите на использование #defines . Включение путей позволило бы вам иметь каталог «gui» для каждого проекта, а также общий каталог «gui» для всех проектов.

3. В настоящее время наша настройка представляет собой общий каталог include с вложенными папками, include/lib чтобы включить общий доступ, мне нужно было бы иметь такие каталоги, как include/exec_a/include/gui , но тогда exec_a включать бессмысленно, и эта же структура должна повторяться и в src каталоге. Я знаю, что это сработает, просто это не очень подходит для нашей текущей структуры каталогов.

4. Вы могли бы использовать символические ссылки в Windows (требуется Vista или 7). Я обновил свой ответ.