Рубрики
Конспект

Конспект: c++

Язык программирования c++:

- высокоуровневый
- компилируемый
- статически типизированный
- общего назначения

Как выбирать:

- стандарт C++ (98/11/14/17/20/...)
- компилятор (gcc, msvc, clang)

Стандарты:

- синтаксис языка
- семантика выражений (определяет что произойдёт если что то сделать)
- состав стандартных библиотек

Стандарт не определяет:

- реализацию языка компилятором
- уровни оптимизации (есть рекомендации)
- последствия нарушения правил игры (undefined behavior)
       - некорректные конструкции
       - некорректные данные 
       - нечто, в стандарте не описанное
       - например: двойной вызов delete
       - например: переполнение знакового целого
- некоторые детали реализации (unspecified behavior)
       - несколько возможных вариантов
       - и все они корректны
       - и стандарт не говорит, какой предпочесть
       - например: порядок вычисления аргументов функций

Пример кода и сборка:

0. Создаем файл:
vim hello_world.cpp
-------------------
#include 

int main () {
    std::cout << "Hello, world!" << std::endl;
    return 0;
}
-------------------

1. Производим компиляцию:
g++ hello_world.cpp -o hello -std=c++14
Где:
  g++ - компилятор
  hello_world.cpp - наш файл с кодом
  -o hello - наш бедующий бинарный файл
  -std=с++14 - версия языка c++

CMake

CMake
- кроссплатформенная система автоматизации сборки
- генерирует сборочные файлы
- много возможностей

Использование:
0. Описать свой проект в CMakeList.txt
1. cmake ${source_dir}
2. cmake --build .
3 cmake --build . --target install


Пример файла CMakeList.txt:
---------------------------
cmake_minimum_required(VERSION 3.5) - используемая версия cmake 
 
project(HelloWorld) - имя проекта

set(HEADERS
        version.h  - заголовочные файлы
)

set(SOURCES
        hello_world.cpp - файл с кодом
        version.cpp - файл с кодом
)

add_executable(hello_world ${HEADERS} ${SOURCES}) - действие - просим cmake собрать бинарник используя файлы с кодом (исходники)

set_target_properties(hello_world PROPERTIES - как будем собирать?
        CXX_STANDART 14 - используем стандарт си++ не ниже 14 версии
        CXX_STANDART_REQUIRED ON - придерживаемся стандарту си++ 


---------------------------


Реальный пример сборки сборочных файлов:
0. Cоздаем директорию build в каталоге с кодом
mkdir build  
1. Переходим в каталог build
cd build  
2. Производим сборку
cmake ..
3. После сборки выполняем ls, что бы увидеть что нам собрал cmake
ls
-------------------
CMakeCache.txt  
CMakeFiles
cmake_install.cmake  
Makefile
-------------------
4. Собственно выполняем сборку нашего проекта
!!! в windows проекты собираются в каталог Debug
!!! в linux бинарные файлы будут лежать где собираем проект
cmake --build .