У меня есть проект, структурированный таким образом:
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>)
Мне нужно сделать несколько вещей здесь:
- Каталоги
subdir/subdir
должны быть общедоступными для использованияв программах, которые используют эту библиотеку с #include <subdir/foo.h>
. - Каталоги
subdir
должны создавать свои собственные статически связанные библиотеки, чтобы я мог запускать тесты, обеспечивающие поддержание отношений зависимости между различными каталогами subdir. - Все это должно создать общую или статическую библиотеку, которая имеет все во всех каталогах
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>
, что совсем не в моих намерениях).