Информация об изменениях

Сообщение покритикуйте метод компиляции от 19.11.2022 16:13

Изменено 19.11.2022 16:31 maks1180

покритикуйте метод компиляции
Покритикуйте плиз такой метод компиляции, создаётся файл main.cpp в него добавляются
#include myfile1.cpp"
#include myfile2.cpp"
и так далее, далее gcc main.cpp компилируется за 1 вызов.
Может быть можно это сделать без создания временного файла main.cpp ?

Сравнение с традиционным способом компиляции (когда каждый .cpp в отдельный .o файл)

Недостатки:
— время сборки при изменении 1 файла, такое же как при сборки целиком проекта.
— #define одного cpp могут повлять на другой
— конфликт имён может быть, если имена глобальных функций или переменных совпадут
— разные опции компиляции приходиться задавать через #pragma

Преимущество:
— время сборки целиком проекта значительно быстрее. Например препроцессор добавляет 2Мб в каждому файлу где есть #include <windows.h>
— не нужно заботиться о указании noexcept так как когда все функции в одном объектном файле, компилятор сам может правильно определить данный атрибут функции.
— можно писать в удобном стиле, когда деларация и имплементация сразу. Есть какой-то термин для данного стиля ?


Деларации и имплементация сразу. Можно конечно поробовать в таком стиле традиционным способом скомпилировать, но тогда будет много имплементаций одного класса (в каждом .o файле, где он используется). И могут быть проблемы: по разному реализовано может быть (в зависимости от макросов и опций компилятора), неопределённость при линковке — неизвестно какую реализацию возмёт линковщик. Поэтому я считаю, что опастно так делать при традиционном способе компиляции.

Может я что-то упустил ? Покритикуйте плиз аргументированно.
покритикуйте метод компиляции
Покритикуйте плиз такой метод компиляции, создаётся файл main.cpp в него добавляются
#include myfile1.cpp"
#include myfile2.cpp"
и так далее, далее gcc main.cpp компилируется за 1 вызов.
Может быть можно это сделать без создания временного файла main.cpp ?

Сравнение с традиционным способом компиляции (когда каждый .cpp в отдельный .o файл)

Недостатки:
— время сборки при изменении 1 файла, такое же как при сборки целиком проекта.
— #define одного cpp могут повлять на другой
— конфликт имён может быть, если имена глобальных функций или переменных совпадут
— разные опции компиляции приходиться задавать через #pragma
— gcc не все неиспользуемые функции выкидывает. ( НЕ разобрался пока ещё почему так).

Преимущество:
— время сборки целиком проекта значительно быстрее. Например препроцессор добавляет 2Мб в каждому файлу где есть #include <windows.h>
— не нужно заботиться о указании noexcept так как когда все функции в одном объектном файле, компилятор сам может правильно определить данный атрибут функции.
— можно писать в удобном стиле, когда деларация и имплементация сразу. Есть какой-то термин для данного стиля ?


Деларации и имплементация сразу. Можно конечно поробовать в таком стиле традиционным способом скомпилировать, но тогда будет много имплементаций одного класса (в каждом .o файле, где он используется). И могут быть проблемы: по разному реализовано может быть (в зависимости от макросов и опций компилятора), неопределённость при линковке — неизвестно какую реализацию возмёт линковщик. Поэтому я считаю, что опастно так делать при традиционном способе компиляции.

Может я что-то упустил ? Покритикуйте плиз аргументированно.