Skip to content

Instantly share code, notes, and snippets.

@nuchyobitva
Last active June 11, 2018 17:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nuchyobitva/e94d271d4b8499a9b6a085a564f65f18 to your computer and use it in GitHub Desktop.
Save nuchyobitva/e94d271d4b8499a9b6a085a564f65f18 to your computer and use it in GitHub Desktop.
lab04

Laboratory work IV

Данная лабораторная работа посвящена изучению систем автоматизации сборки проекта на примере CMake

$ open https://cmake.org/

Tasks

  • 1. Создать публичный репозиторий с названием lab04 на сервисе GitHub
  • 2. Ознакомиться со ссылками учебного материала
  • 3. Выполнить инструкцию учебного материала
  • 4. Составить отчет и отправить ссылку личным сообщением в Slack

Tutorial

$ export GITHUB_USERNAME=nuchyobitva
//Настройка переменных окружения.
$ cd ${GITHUB_USERNAME}/workspace
$ pushd .
$ source scripts/activate
//Активация скрипта для расширения $PATH
$ git clone https://github.com/${GITHUB_USERNAME}/lab03.git projects/lab04
$ cd projects/lab04
$ git remote remove origin
$ git remote add origin https://github.com/${GITHUB_USERNAME}/lab04.git
//Клонирование репозитория, удаление и создание нового удаленного репозитория
$ g++ -I./include -std=c++11 -c sources/print.cpp
$ ls print.o
$ nm print.o | grep print
$ ar rvs print.a print.o
$ file print.a
$ g++ -I./include -std=c++11 -c examples/example1.cpp
$ ls example1.o
$ g++ example1.o print.a -o example1
$ ./example1 && echo
//Компиляция и сборка файлов. Работа с бинарными файлами, архивация.
$ g++ -I./include -std=c++11 -c examples/example2.cpp
$ nm example2.o
$ g++ example2.o print.a -o example2
$ ./example2
$ cat log.txt && echo
//Компиляция и просмотр содержимого бинарного файла, сборка, запуск и вывод в log.txt.
$ rm -rf example1.o example2.o print.o 
$ rm -rf print.a 
$ rm -rf example1 example2
$ rm -rf log.txt
//Удаление бинарных файлов, архива, log.txt
$ cat > CMakeLists.txt <<EOF
cmake_minimum_required(VERSION 3.0)
project(print)
EOF
//Создание файла конфигурации Cmake и указание минимально необходимой версии.
$ cat >> CMakeLists.txt <<EOF
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
EOF
//Указание стандарта C++11
$ cat >> CMakeLists.txt <<EOF
add_library(print STATIC \${CMAKE_CURRENT_SOURCE_DIR}/sources/print.cpp)
EOF
//Добавление библиотеки с указанием файла исходного кода.
$ cat >> CMakeLists.txt <<EOF
include_directories(\${CMAKE_CURRENT_SOURCE_DIR}/include)
EOF
//Указание расположение заголовочных файлов.
$ cmake -H. -B_build
$ cmake --build _build
//Указание, куда поместить файлы сборки и сборка проекта.
$ cat >> CMakeLists.txt <<EOF

add_executable(example1 \${CMAKE_CURRENT_SOURCE_DIR}/examples/example1.cpp)
add_executable(example2 \${CMAKE_CURRENT_SOURCE_DIR}/examples/example2.cpp)
EOF
$ cat >> CMakeLists.txt <<EOF

target_link_libraries(example1 print)
target_link_libraries(example2 print)
EOF
$ cmake --build _build
$ cmake --build _build --target print
$ cmake --build _build --target example1
$ cmake --build _build --target example2
//Сборка проекта
$ ls -la _build/libprint.a
$ _build/example1 && echo
hello
$ _build/example2
$ cat log.txt && echo
hello
$ rm -rf log.txt
//Запуск и вывод, удаление log.txt
$ git clone https://github.com/tp-labs/lab04 tmp
$ mv -f tmp/CMakeLists.txt .
$ rm -rf tmp
//Клонирование репозитория во временный каталог, перемещение файла CMakeList, удаление временного каталога
$ cat CMakeLists.txt
$ cmake -H. -B_build -DCMAKE_INSTALL_PREFIX=_install
$ cmake --build _build --target install
$ tree _install
//Настройка префикса, создание конфигурационных файлов, просмотр дерева
$ git add CMakeLists.txt
$ git commit -m"added CMakeLists.txt"
$ git push origin master
//Добавление файла, коммит и загрузка в удаленный репозиторий

Report

$ popd
$ export LAB_NUMBER=04
$ git clone https://github.com/tp-labs/lab${LAB_NUMBER} tasks/lab${LAB_NUMBER}
$ mkdir reports/lab${LAB_NUMBER}
$ cp tasks/lab${LAB_NUMBER}/README.md reports/lab${LAB_NUMBER}/REPORT.md
$ cd reports/lab${LAB_NUMBER}
$ edit REPORT.md
$ gistup -m "lab${LAB_NUMBER}"

Links

  • Autotools - это набор программных средств, предназначенных для поддержки переносимости исходного кода программ между UNIX-подобными системами.
  • CMake - это кроссплатформенная система автоматизации сборки программного обеспечения из исходного кода.
Copyright (c) 2017 Братья Вершинины
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment