компіляція з і заголовний файл
так ось при спробі скомпілювати код за допомогою команди (g++ main.cpp) виводь повідомлення що не знає що за функція func1(), а ось при використанні (g++ main.cpp file.cpp) все працює, так ось закрався сумнів а чи правильно так компіліть, оскільки якщо надалі файлів буде від 10 і всі їх потрібно прописувати після (g++ main.cpp ). )? використовую MinGW версія gcc-6.3.0
Не хвилюйтесь. Поступово познайомтеся, що такий make, як поєднувати файли в бібліотеки і тд і тп.
2 відповіді 2
Цілком вірно, якщо файлів буде 10, то всі 10 доведеться прописувати в командному рядку компілятора
g++ file1.cpp file2.cpp. file9.cpp main.cpp
Такий командний рядок насправді послідовно виконує два етапи трансляції: спочатку компілює індивідуальні .cpp файли в .o файли, а потім збирає отримані .o файли у фінальну програму.
За бажанням ви можете використовувати опцію -c для того, щоб розділити ці два етапи: спочатку скомпілювати .cpp файли в .o файли по одному
g++ -c file1.cpp g++ -c file2.cpp. g++ -c file9.cpp g++ -c main.cpp
а потім виконати фінальне складання. Однак для фінального зброювання вам все одно доведеться передати всі отримані .o файли в g++ (або в ld)
g++ file1.o file2.o. file9.o main.o
Тобто. як не крути, якийсь крок, на якому вам доведеться перерахувати "багато файлів" у командному рядку, все одно буде.
Позбутися надто довгих перерахувань імен файлів допоможуть бібліотекиАле насправді нічого страшного в таких довгих командних рядках немає.
Як скомпілювати C++ у командному рядку?
Ще одним поширеним компілятором до створення додатків на C++ є компілятор Visual C++ від компанії Microsoft. Зазвичай цей компілятор застосовується як частина середовища розробки Visual Studio.Однак встановлення та використання Visual Studio для роботи з Visual C++ в принципі необов'язкове. І в даному випадку ми розглядатимемо компіляцію програм у командному рядку. А робота з Visual Studio буде розглянута в одній з подальших статей. Також варто зазначити, що Visual C++ працює лише для Windows.
Для встановлення Visual C++ нам потрібно встановити пакет Microsoft C++ Build Tools. Для цього перейдемо за адресою https://visualstudio.microsoft.com/visual-cpp-build-tools/ та натиснемо на кнопку завантаження "Download Build Tools":
Запустимо завантажений файл, в результаті буде встановлений та запущений Visual Studio Installer:
Тут нам потрібно вибрати пункт Розробка класичних програм на C++
Після встановлення в меню Пуск у пункті Visual Studio ми можемо знайти ряд підпунктів:
Тут нас буде цікавити насамперед утиліта Developer Command Prompt for VS 2022 та x64 Native Tools Command Prompt for VS 2022 . Можна використовувати одну з них, але далі я орієнтуватимуся саме на x64 Native Tools Command Prompt for VS 2022, тому що вона вже за замовчуванням націлена на 64-розрядну Windows.
Отже, відкриємо x64 Native Tools Command Prompt for VS 2022 і введемо до неї команду cl :
************************************************** ******************** ** Visual Studio 2022 Developer Command Prompt v17.9.3 ** Copyright (c) 2022 Microsoft Corporation ********** ************************************************** ********** [vcvarsall.bat] Environment initialized for: 'x64' C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools>cl Microsoft (R) C/C++ Optimizing Compiler Version 19.39.33522 для x64 Copyright (C) Microsoft Corporation. Всі права захищені. usage: cl [option. ] filename. [/ link linkoption. ] C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools>
Команда cl подає звернення до компілятора Microsoft Visual C++.У результаті консоль виводить нам деяку загальну інформацію про компілятор, його версію та формат використання.
Створення першої програми
Отже, компілятор встановлений, і тепер ми можемо написати першу програму. Для цього буде потрібно будь-який текстовий редактор для набору вихідного коду.
Отже, створимо на жорсткому диску С папку для вихідних файлів. А в цій папці створимо новий текстовий файл, який перейменуємо на hello.cpp. мають розширення cpp.
У моєму випадку файл hello.cpp знаходиться у папці C:\cpp.
Тепер визначимо у файлі hello.cpp найпростіший код, який виводитиме рядок на консоль:
#include // підключаємо заголовний файл iostream int main() // визначаємо функцію main < // початок функції std::cout // кінець функції
Для виведення рядка на консоль необхідно підключити потрібний функціонал.
Цей рядок представляє директиву препроцесора, яка дозволяє підключити бібліотеку iostream.
Далі йде визначення функції main . Функція main повинна бути у будь-якій програмі на С++, з неї власне і починається виконання програми.
Функція main складається з чотирьох елементів:
- Тип повертається значення . У даному випадку це тип int .
- Ім'я функції . У разі функція називається main.
- Список параметрів . Після імені функції у дужках йде список параметрів.
- Тіло функції. Після списку параметрів у фігурних дужках іде тіло функції. Тут і визначаються ті дії, які виконує функція main.
У тілі функції відбувається виведення рядка на консоль. Для звернення до консолі використовують стандартний потік виведення std::cout . За допомогою оператора
Наприкінці здійснюємо вихід із функції за допомогою оператора return. Так як функція повинна повертати ціле число, то після return вказується число 0. Нуль використовується як індикатор успішного завершення програми.
Після кожної інструкції у мові C++ ставляться крапка з комою.
Кожен рядок має коментар. Все, що написано після подвійного слішу // представляє коментар. Коментар не враховується при компіляції програми, і є частиною програмного коду, а служать лише його описи. Коментар дозволяє зрозуміти, що робить програма.
Тепер скомпілюємо цей файл. Для цього відкриємо x64 Native Tools Command Prompt for VS 2022 і спочатку за допомогою cd команди перейдемо до папки з вихідним файлом:
Варто відзначити, що треба запускати x64 Native Tools Command Prompt for VS 2022 або Developer Command Prompt for VS 2022 , а не стандартний командний рядок/термінал Windows.
Щоб скомпілювати вихідний код, необхідно компілятору cl передати як параметр файл hello.cpp і опцію /EHsc :
В результаті буде скомпілюваний виконуваний файл, який за умовчанням називається hello.exe. І ми можемо звернутися до цього файлу, і в цьому випадку консоль виведе рядок "Hello METANIT.COM!", Як і прописано в коді. Повний висновок:
************************************************** ******************** ** Visual Studio 2022 Developer Command Prompt v17.9.3 ** Copyright (c) 2022 Microsoft Corporation ********** ************************************************** ********** [vcvarsall.bat] Environment initialized for: 'x64' C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools>cd c:\cpp c:\cpp>cl /EHsc hello.cpp Microsoft (R) C/C++ Optimizing Compiler Version 19.39.33522 для x64 Copyright (C) Microsoft Corporation. Всі права захищені. hello.cpp Microsoft (R) Incremental Linker Version 14.39.33522.0 Copyright (C) Microsoft Corporation. Всі права захищені. /out:hello.exe hello.obj c:\cpp>hello Hello METANIT.COM! c:\cpp>
- Глава 1. Введення С++
- Мова програмування С++
- Перша програма Windows. Компілятор g++
- Перша програма Windows. Компілятор Clang
- Перша програма Windows. Компілятор Microsoft Visual C++
- Перша програма на Linux. Компілятор g++
- Перша програма на MacOS. Компілятор Clang
- Налаштування параметрів компіляції
- Локалізація та кирилиця в консолі
- Структура програми
- Змінні
- Типи даних
- Константи
- Введення та виведення в консолі
- using. Підключення просторів імен та визначення псевдонімів
- Арифметичні операції
- Статична типізація та перетворення типів
- Порозрядні операції
- Операції присвоєння
- Умовні вирази
- Конструкція if-else та тернарний оператор
- Конструкція switch-case
- Цикли
- Посилання
- Масиви
- Багатовимірні масиви
- Масиви символів
- Введення у рядки
- Що таке вказівники
- Операції із вказівниками
- Арифметика покажчиків
- Константи та покажчики
- Вказівники та масиви
- Визначення та оголошення функцій
- Область видимості об'єктів
- Параметри функції
- Передача аргументів за значенням та за посиланням
- Константні параметри
- Оператор return та повернення результату
- Вказівники у параметрах функції
- Масиви у параметрах функції
- Параметри функції main
- Повернення покажчиків та посилань
- Перевантаження функцій
- Рекурсивні функції
- Рекурсія на прикладі швидкого сортування
- Вказівники на функції
- Вказівники на функції як параметри
- Тип функції
- Покажчик на функцію як значення, що повертається
- Поділ програми на файли
- Зовнішні об'єкти
- Динамічні об'єкти
- Динамічні масиви
- unique_ptr
- shared_ptr
- Визначення класів
- Конструктори та ініціалізація об'єктів
- Управління доступом. Інкапсуляція
- Оголошення та визначення функцій класу
- Конструктор копіювання
- Константні об'єкти та функції
- Ключове слово this
- Дружні функції та класи
- Статичні члени класу
- Деструктор
- Структури
- Перерахування
- успадкування
- Управління доступом у базових та похідних класах
- Приховування функціоналу базового класу
- Множинне успадкування
- Віртуальні функції та їх перевизначення
- Перетворення типів
- Динамічне перетворення
- Особливості динамічного зв'язування
- Чисті віртуальні функції та абстрактні класи
- Перевантаження операторів
- Оператори перетворення типів
- Оператор індексування
- Перевизначення оператора присвоєння
- Простір імен
- Вкладені класи
- Обробка винятків
- Вкладені try-catch
- Створення своїх типів винятків
- Тип exception
- Типи винятків
- Шаблони функцій
- Шаблон класу
- Спеціалізація шаблону класу
- Спадкування та шаблони класів
- Типи контейнерів
- Вектор
- Ітератори
- Операції з векторами
- Array
- List
- Forward_list
- Deque
- Стек std::stack
- Черга std::queue
- Черга пріоритетів std::priority_queue
- Безліч
- Словник std::map
- Span
- Визначення рядків
- Рядки з підтримкою Unicode
- Перетворення типів та рядки
- Порівняння рядків
- Отримання підрядка та перевірка початку та кінця рядка
- Пошук підрядки
- Зміна рядка
- Операції із символами
- Програма підрахунку слів
- Тип std:string_view
- rvalue
- Конструктор переміщення
- Оператор присвоєння з переміщенням
- Роль noexcept при переміщенні
- Об'єкти функцій
- Лямбда-вирази
- Захоплення зовнішніх значень у лямбда-виразах
- Шаблон std::function<>
- Мінімальний та максимальний елементи
- Пошук елементів
- Копіювання елементів
- Видалення елементів та ідіома Remove-Erase Idiom
- Сортування
- Уявлення. Фільтрування
- Проекція даних
- Пропуск елементів. drop_view та drop_while_view
- Вилучення діапазону елементів. take_view та take_while_view
- Ланцюжки уявлень
- Оператор requires
- Концепти
- Вираз requires
- Обмеження типу для auto
- Базові типи для роботи з потоками
- Файлові потоки. Відкриття та закриття
- Читання та запис текстових файлів
- Перевизначення операторів введення та виведення
- Математичні константи та операції
- Форматування рядків та функція format
- std::optional
- Управління ресурсами. Ідіома RAII
- Ідіома копіювання та заміни
- Ідіома Move-and-Swap
- Перша програма у Visual Studio
- Перша програма в Qt Creator