У меня всегда возникают проблемы с c++, поэтому я трачу больше времени на поиск зависимостей вместо программирования при настройке нового проекта. Я ищу в Интернете способ сделать это автоматически или программное обеспечение, которое это делает. На самом деле, я всегда программирую на geany и компилирую файлы файлов сценариев...
Итак, есть ли программное обеспечение для управления этим? Разве IDE это делает?
Я всегда включаю файлы.cpp в свой файл main.cpp, а затем включаю файлы.hpp на эти.cpp. Итак, если у меня есть main.cpp, object.hpp и object.cpp, я буду включать object.cpp в main.cpp и object.hpp на object.cpp. Есть ли лучший способ сделать это?
Могу ли я просто включить файлы.hpp, а в скрипте сборки добавить каждый.cpp файл?
Я просто не могу найти ответ в Интернете, возможно, я делаю неправильный вопрос...
Я нашел хорошую статью, касающуюся включения файлов.
Общей практикой для всех c++ файлов заголовков является просто определение защиты включения.
#ifndef TEST_H
#define TEST_H
// class definitions goes here
#endif
Если есть некоторые циклические зависимости, рассмотрите форвардную декларацию.
Каждый раз, когда этот заголовок включен, компилятор проверяет, был ли уже определен символ TEST_H. Это в основном гарантирует, что содержимое этого файла включено только один раз, и поэтому существует одно объявление классов, определенное в файле заголовка.
Полезно знать, что директива "#include <>" копирует и вставляет все содержимое включенного файла.
Включение файла.cpp не является строго запрещенным, а иногда и хорошим выбором, считается плохой практикой. Как я уже упоминал, включая файл, означает, что все содержимое файла дублируется в месте включения. Это нормально, для файла заголовка с защитой включения, но не для файла.cpp, поскольку каждое определение функции внутри этого файла будет дублироваться.
Не считая файл в скрипте сборки, в него встроены только те дублированные данные, в противном случае вы столкнетесь с несколькими ошибками переопределения функций.
Если вы ищете IDE, подумайте:
IDE не будет выполнять всю работу, но вы можете быть значительно более продуктивной, используя хорошую среду IDE.
TL;DR:
Я вижу много хороших предложений с хорошими практиками, но ваша ошибка (включая .cpp
файлы из файла .cpp
) предполагает, что вам не хватает какой-либо концепции в процессе сборки C
/C++
, я надеюсь, что небольшое объяснение поможет вам понять лучше и избежать ошибки.
Подумайте о файлах .c.cc.cxx.cpp
качестве модулей, файл .cpp
- это модуль с вашей реализацией чего-то, .h.hpp
- это просто заголовки, где обычно вы не помещаете реализации, но объявления должны делиться с несколькими модули.
Обычно каждый .cpp
модуль компилируется в двоичный объект g++ -c -o mymod1.o mymod1.cpp
затем (как только все модули скомпилированы) соединены вместе g++ -o myprog mymod1.o mymod2.o...
Даже если вы компилируете и связываете одну команду g++ -o myprog mymod1.cpp mymod2.cpp
за сценой g++
обрабатывает каждый модуль как отдельный объект.
Я думаю, важно понимать, что каждый модуль/объект ничего не знает о других, и если вам нужен какой-то другой модуль (ваш main.cpp
), чтобы узнать что-то о mymod1.cpp
требуется файл заголовка .h.hpp
(mymod1.h
) с объявлениями, необходимыми для совместного использования: глобальные переменные модуля, определения, перечисления, прототипы функций или декларации классов, а затем просто mymod1.h
в модуль (модули), где вы хотите использовать что-то из своей реализации mymod1
(main.cpp
).
Кроме того, вы пишете, что используете скрипт оболочки для сборки, это нормально, если в вашем проекте мало файлов, лучше было бы использовать что-то вроде make
, узнать, как его использовать, потребуется некоторое время, но я бы geany
что у geany
есть некоторые возможности для строить проекты на основе Makefiles
, make
- это способ долгое время C++
проекты C
/C++
.
I always include .cpp files on my main.cpp
- неправильно! Включите только заголовочный файл и постройте каждый исходный файл отдельно.#include
-ing.cpp
файлов.