8000 GitHub - govyadkin/lab03: Изучение систем автоматизации сборки проекта на примере CMake
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content
forked from tp-labs/lab03

Изучение систем автоматизации сборки проекта на примере CMake

License

Notifications You must be signed in to change notification settings

govyadkin/lab03

 
 

Repository files navigation

Homework

Представьте, что вы стажер в компании "Formatter Inc.".

Задание 1

Вам поручили перейти на систему автоматизированной сборки CMake. Исходные файлы находятся в директории formatter_lib. В этой директории находятся файлы для статической библиотеки formatter. Создайте CMakeList.txt в директории formatter_lib, с помощью которого можно будет собирать статическую библиотеку formatter.

$ git clone https://github.com/dankokin/lab03
$ cd lab03
$ cd formatter_lib
$ cat >> CMakeLists.txt << EOF
> EOF
$ nano CMakeLists.txt
cmake_minimum_required(VERSION 3.4)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

project(formatter)

set(SOURCES formatter.cpp)
set(HEADERS formatter.h)

add_library(formatter ${SOURCES} ${HEADERS})
target_include_directories(formatter PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})

Задание 2

У компании "Formatter Inc." есть перспективная библиотека, которая является расширением предыдущей библиотеки. Т.к. вы уже овладели навыком созданием CMakeList.txt для статической библиотеки formatter, ваш руководитель поручает заняться созданием CMakeList.txt для библиотеки formatter_ex, которая в свою очередь использует библиотеку formatter.

$ cd ..
$ cd formatter_ex_lib
$ cat >> CMakeLists.txt << EOF
> EOF
$ nano CMakeLists.txt
cmake_minimum_required(VERSION 3.4)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

project(formatter_ex)

add_library(formatter_ex STATIC formatter_ex.cpp)

add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../formatter_lib ${CMAKE_CURRENT_SOURCE_DIR}/formatter)

target_include_directories(formatter_ex PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})

target_link_libraries(formatter_ex formatter)

Задание 3

Конечно же ваша компания предоставляет примеры использования своих библиотек. Чтобы продемонстрировать как работать с библиотекой formatter_ex, вам необходимо создать два CMakeList.txt для двух простых приложений:

  • hello_world, которое использует библиотеку formatter_ex;
  • solver, приложение которое испольует статические библиотеки formatter_ex и solver_lib.

Hello_World:

$ cd ..
$ cd hello_world_application
$ cat >> CMakeLists.txt << EOF
> EOF
$ nano CMakeLists.txt
cmake_minimum_required(VERSION 3.4)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

project(hello_world)

add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../formatter_ex_lib ${CMAKE_CURRENT_SOURCE_DIR}/formatter_ex)

add_executable(sources ${CMAKE_CURRENT_SOURCE_DIR})

target_link_libraries(sources formatter_ex)

solver_lib:

$ cd ..
$ cd solver_lib
$ cat >> CMakeLists.txt << EOF
> EOF
$ nano CMakeLists.txt
cmake_minimum_required(VERSION 3.4)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

project(solver_lib)

add_library(solver_lib STATIC solver.cpp)
target_include_directories(solver_lib PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})

solver_application:

$ cd ..
$ cd solver_application
$ cat >> CMakeLists.txt << EOF
> EOF
$ nano CMakeLists.txt

Aналогично, только библиотек уже 2:

cmake_minimum_required(VERSION 3.4)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

project(solver)

add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../solver_lib ${CMAKE_CURRENT_SOURCE_DIR}/solver_lib)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../formatter_ex_lib ${CMAKE_CURRENT_SOURCE_DIR}/formatter_ex)

add_executable(source equation.cpp)

target_link_libraries(source solver_lib)
target_link_libraries(source formatter_ex)

Удачной стажировки!

Links

Copyright (c) 2015-2019 The ISC Authors

About

Изучение систем автоматизации сборки проекта на примере CMake

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • CMake 62.2%
  • C++ 36.0%
  • C 1.8%
0