Я знаю, что этой теме более двух лет, но она все еще появляется в поиске Google, поэтому я расскажу свое собственное представление об этом беспорядке ...
Во-первых, вы обязательно должны решить, хотите ли вызаниматься кросс-платформенной разработкой ... И я имею в виду не только несколько ОС, но и несколько компиляторов, ide (?) и стандартные библиотеки.Даже в Unix существуют рифы между Linux и BSD, некоторые говорят, что это просто проблемы с лицензированием, но код, похоже, движется в разных направлениях.
Итак, первое, что нужно сделать, это решить проблему построенияваши вещи, и вы можете просто использовать один файл, который генерирует все остальное (например, CMake, bakefile или один из других, который пытается быть лучше, чем make), или вы можете иметь один каталог сборки со многими файлами сборки, которые поддерживаются отдельно,Секунды работают хорошо, когда не так много разных платформ (и в большинстве случаев у вас будет комбинация make (или одного из его вариантов, таких как tup) и gcc или clang или [вставьте сюда другой компилятор на основе Unix], иих у вас будут Borland, Visual Studio и т. д. и т. д.
Во-вторых, если вы пишете библиотеку, вы можете разделить внешние заголовки и остальной код на разные каталоги, простозадача сборки библиотеки и установки заголовков и скомпилированного бинаries (двоичные файлы в этом случае всегда компилируются, так что вы можете удалить их, скомпилированные перед двоичными файлами).
В-третьих, всегда есть документация, обычно она взята из технических руководств, и почти во всех технических книгах, а иногда и забытаразработчиками, но это важно, так как ваши пользователи не будут понимать ваш код, хотя хрустальный шар, и вы можете использовать что-то вроде doxygen (для C ++) и docbook / markdown / ... для остальных (яНа самом деле, пытаясь выяснить последнюю часть (нетехническую документацию), одна крутая цель - иметь документацию в репозитории, и когда вы обновляете документацию, скрипт сборки обновляет веб-сайт, и хотя используется что-то вроде подмодулей gitвсякий раз, когда кто-то проверяет или обновляет свой код из вашего хранилища кода, он также проверяет самую последнюю документацию.(Это в основном то, что Maven Doxia пытается сделать для Java, даже если с ужасным рабочим процессом)
Таким образом, в конце вы можете закончить с папками src, папкой включения (если у вас есть публичные заголовки),папка doc (с вашей документацией), папка сборки (в случае нескольких сценариев сборки) и папка ресурсов или ресурсов (если у вас есть связанные файлы, такие как изображения, текст перевода, файлы xml, файловые базы данных (например, sqlite) и т. д..).Что, если ваш ленивый тип, как я, означает большую работу, чтобы настроить проект (сделать его сборочным, тестируемым и иметь возможность создавать документацию).
Об источнике информацииСборки, которые зависят от вас, хотя некоторые инструменты стимулируют это (CMake приходит на ум), но не забудьте настроить свой репозиторий, чтобы там не оказалось ненужных файлов, либо случайно, либо потому, что некоторые неуклюжие разработчики разместили их там.Если вам нужно, просто поместите все ваши файлы сборки (например, из VC ++) в каталог, специфичный для этого файла сборки (например, vcbuild), и напишите скрипт установки, который помещает двоичные файлы и необходимые файлы, гдепользователь хочет их, и вам просто нужно настроить систему управления исходным кодом, чтобы игнорировать эти каталоги и все, что находится под ними.