вторник, 3 августа 2010 г.

Иерархия директорий для разработки библиотеки на C++

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

Можно использовать следующую структуру папок (проект описан в другом посте):
D:\PROJECTS\SIMPLE-THINGS\TRUNK\CMAKE_TEST
│   CMakeLists.txt
│
├───cli
│   │   CMakeLists.txt
│   │
│   └───src
│           main.cpp
│
└───core
    │   CMakeLists.txt
    │
    ├───include
    │       core.hpp
    │
    └───src
            core.cpp
            core.hpp
Примем соглашение, по которому клиент библиотеки вправе обращаться только к заголовочным файлам из папки include, а файлы в этой папке будут ссылаться на другие файлы из каталога библиотеки. Таким образом поставленная задача инкапсуляции будет решена.

Но возникает другая проблема: include guard в одноименных файлах (core.hpp в примере) может совпадать, в этом случае целевой файл не будет заинклюжен. Для этого придется принять еще одно соглашение, по которому guard во внешних файлах будет называться, например, CLASS_NAME_HPP, а во внутренних _CLASS_NAME_HPP_.

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

Отправить комментарий