Библиотека с вложенными библиотеками и включающими каталоги, как мне сделать это в CMake? - PullRequest
0 голосов
/ 29 мая 2018

У меня есть проект, структурированный таким образом:

project
 |\_subdir
 |   | Some .cxx files
 |   | some .h files (included with #include "foo.h"
 |    \_subdir
 |       | Some .h files (included with #include <subdir/foo.h>)
  \_subdir2
     | some .cxx files
     | some .h files (included with #include "foo.h"
      \_subdir2
         | Some .h files (included with #include <subdir2/foo.h>)

Мне нужно сделать несколько вещей здесь:

  1. Каталоги subdir/subdir должны быть общедоступными для использованияв программах, которые используют эту библиотеку с #include <subdir/foo.h>.
  2. Каталоги subdir должны создавать свои собственные статически связанные библиотеки, чтобы я мог запускать тесты, обеспечивающие поддержание отношений зависимости между различными каталогами subdir.
  3. Все это должно создать общую или статическую библиотеку, которая имеет все во всех каталогах subdir и может быть связана с программами, использующими эту библиотеку.

В настоящее время у меня естьсобрать систему, которую я создал, используя autotools (но не automake), а также некоторые пользовательские сценарии perl, которые обрабатывают выходные данные зависимостей от флагов -M и создают пользовательские make-файлы, которые выражают информацию о зависимостях.Кроме того, они создают каталог include, который является linkfarm, так что каждый может использовать #include <subdir/foo.h> и просто -I каталог linkfarm.

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

Как бы я сделал это в CMake?Нужно ли перемещать каталоги subdir/subdir?

Поскольку если я добавлю каталоги subdir в качестве общедоступного включения, то все пойдет не так, как люди увидят личные файлы .h наsubdir уровень, а также возможность включать в них файлы .cxx.Хуже того, они увидят их как включения верхнего уровня (т. Е. #include <bar.cxx>, где bar.cxx - это частный файл реализации, объектный код которого уже должен быть в библиотеке).

Но если добавить subdir/subdir какВо включаемом каталоге файлы .h не будут отображаться в подкаталогах так, как должны (т.е. #include <subdir/public.h> не будет работать, вместо этого мне придется использовать #include <public.h>, что совсем не в моих намерениях).

1 Ответ

0 голосов
/ 29 мая 2018

Если вы беспокоитесь о пользователях вашей библиотеки, они увидят установленных файлов, а не файлы source / build .,Если вы не устанавливаете частные заголовки (с subdir/), пользователь их не увидит.

Но если вы не собираетесь устанавливать библиотеку, вы можете разделить публичные и частные включают деревья.Например, каждый проект может иметь частные заголовки непосредственно в своем исходном каталоге и public заголовки в своем подкаталоге include/:

  project
 |\_subdir
 |   | Some .cxx files
 |   | Private .h files (included with #include "foo.h")
 |    \_include (public include directory)
 |       \_subdir
 |         | Public .h files (included with #include <subdir/foo.h>)
  \_subdir2
     | some .cxx files
     | Private .h files (included with #include "foo.h")
      \_include (public include directory)
         \_subdir2
           | Public .h files (included with #include <subdir2/foo.h>)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...