Я новичок в программировании в целом, поэтому решил, что начну с создания простого векторного класса на С++. Однако с самого начала я хотел бы получить хорошие привычки, а не пытаться изменить свой рабочий процесс позже.
В настоящее время у меня есть только два файла vector3.hpp
и vector3.cpp
. Этот проект постепенно начнет расти (делая его гораздо более общей библиотекой линейных алгебр), поскольку я больше знаком со всем, поэтому я хотел бы принять "стандартный" макет проекта, чтобы облегчить жизнь позже. Поэтому, оглядевшись, я нашел два способа организовать файлы hpp и cpp, первый из которых:
project
└── src
├── vector3.hpp
└── vector3.cpp
а второе:
project
├── inc
│ └── project
│ └── vector3.hpp
└── src
└── vector3.cpp
Что бы вы порекомендовали и почему?
Во-вторых, я хотел бы использовать платформу тестирования Google С++ для модульного тестирования моего кода, поскольку он кажется довольно простым в использовании. Вы предлагаете связать это с моим кодом, например, в папке inc/gtest
или contrib/gtest
? Если в комплекте вы предлагаете использовать fuse_gtest_files.py
script для уменьшения числа или файлов или оставить его как есть? Если не указано, как обрабатывается эта зависимость?
Когда дело доходит до написания тестов, как они обычно организованы? Я думал иметь один файл cpp для каждого класса (например, test_vector3.cpp
), но все скомпилированы в один бинарный файл, чтобы все они могли легко выполняться вместе?
Так как библиотека gtest обычно создается с использованием cmake и make, я думал, что для моего проекта будет также целесообразно построить такой проект? Если я решил использовать следующий макет проекта:
├── CMakeLists.txt
├── contrib
│ └── gtest
│ ├── gtest-all.cc
│ └── gtest.h
├── docs
│ └── Doxyfile
├── inc
│ └── project
│ └── vector3.cpp
├── src
│ └── vector3.cpp
└── test
└── test_vector3.cpp
Как CMakeLists.txt
должен выглядеть так, чтобы он мог либо построить только библиотеку, либо библиотеку, и тесты? Также я видел довольно много проектов, которые имеют каталог build
и bin
. Создается ли сборка в каталоге сборки, а затем двоичные файлы переместились в каталог bin? Будут ли бинарные файлы для тестов и библиотеки жить в одном месте? Или было бы более целесообразно структурировать его следующим образом:
test
├── bin
├── build
└── src
└── test_vector3.cpp
Я также хотел бы использовать doxygen для документирования моего кода. Возможно ли, чтобы это автоматически запускалось с помощью cmake и делало?
Извините за столько вопросов, но я не нашел книгу на С++, которая удовлетворительно отвечает на эти вопросы.