заголовки в отдельную папку includes? или ещё и исходники в отдельную папку src?
Публичные хэдеры отдельно, приватные рядом с сорцами. Сорцы в src, публичные хэдеры в include
Такс, а если, несколько либ, но с похожим интерфейсом? project ..module1 ….include ……project ……..module1 ……….some_include.hpp ..module2 ….include ……project ……..module2 ……….another_include.hpp
Ну, у нас так сделано: project1 include library1 a.h library2 b.h src library1 a_priv.h a.cpp library2 b_priv.h b.cpp project2 include library3 c.h library4 d.h src library3 c_priv.h c.cpp library4 d_priv.h d.cpp
я чуть по другому делаю. сорцы либы в отдельном каталоге, но c "подкаталогом" в include: project lib lib1 include lib1 a.h src a.c b_priv.h
Ваша схема имхо лучше, она удобнее при предоставлении dev пакета вашего ПО в линуксе, ибо ложится на стандартную схему файловой иерархии линукса. Я пытался и у нас пропихнуть - мне не дали)
чем мотивировали отказ? на предыдущей работе "подсмотрел" такую структуру. Но там люди пошли дальше, локально есть либа, и там в include сразу хедера. А вот на этапе конфигурации (вроде в этот момент) CMake, в "кеше" воссоздаётся такая структура. Не помню, зачем сделали так сложно. Может чтобы не забыть создать подкаталог в include
печалька.. :( Желаю вам упорства и "схождения звёзд на небосводе", чтобы люди осознали, что по новому УДОБНЕЕ :)
Я вот никогда не понимал этого разделения =\ Особенно в свете современных IDE. Одно дело когда это действительно 3д парти либы и тебе в них никогда не надо будет лезть... Но это филосовская шиза, в них скорее всего придеться лезть и прыгать между папками - та еще дурость. =\
Одно волшебное слово, от которого веет романтикой и приключениями: legacy... :)
Вот здесь есть голосование за два подхода с их описанием сообщением ниже
большое спасибо, полезно, мне canonical по духу ближе. Выделять публичный includes вижу смысл если пишешь библиотеку и нужно отдать пользователю сухую папку с заголовками
>> нужно отдать пользователю сухую папку с заголовками На самом деле, это совсем не обязательно. Я обычно разделяю публичные и приватные заголовки средствами самого CMake, для сложной иерархии каталогов понадобилось всего несколько строк функции, которая устанавливала их, сохраняя корректную иерархию. Может быть, сейчас и этого уже делать не нужно – не проверял
сейчас остановился на такой схеме, критикуйте |_CMakeLists.txt | |_alphalib | |_includes | |_alpha.h | |_CMakeLists.txt | |_alphaimpl.h | |_alpha.cpp | |_myapplib | |_CMakeLists.txt | |_myapp.h | |_myapp.cpp | |_myapp | |_main.cpp | |_myapptests | |_myapptest1.cpp
критики нет? лейаут совершенный?
Это же вкусовщина - идеальных лейтаутов не существует)
И тут я соглашусь )
Обсуждают сегодня