Update README - added manual for creating an artifact
This commit is contained in:
parent
e7db3a9f90
commit
901b222bdc
|
@ -1 +1,2 @@
|
||||||
/build/
|
/build/
|
||||||
|
/.vscode/*
|
105
readme.md
105
readme.md
|
@ -12,14 +12,14 @@
|
||||||
--- bin/
|
--- bin/
|
||||||
---- program
|
---- program
|
||||||
-- include/
|
-- include/
|
||||||
--- algo.h
|
--- algos.h
|
||||||
--- algo.c
|
--- algos.c
|
||||||
-- src/
|
-- src/
|
||||||
--- main.c
|
--- main.c
|
||||||
-- tests/
|
-- tests/
|
||||||
--- test.cpp
|
--- test.cpp
|
||||||
- conanfile.txt
|
-- conanfile.txt
|
||||||
- CMakeLists.txt
|
-- CMakeLists.txt
|
||||||
```
|
```
|
||||||
## conanfile
|
## conanfile
|
||||||
Для подключения тестового фреймворка используется система менеджмента артефактов Conan, которая позволяет осуществлять подключение заранее скомпилированных библиотек без необходимости их установки на ОС разработчика. Подключение осуществляется описанием корректных настроек в файле conanfile.txt:
|
Для подключения тестового фреймворка используется система менеджмента артефактов Conan, которая позволяет осуществлять подключение заранее скомпилированных библиотек без необходимости их установки на ОС разработчика. Подключение осуществляется описанием корректных настроек в файле conanfile.txt:
|
||||||
|
@ -37,7 +37,7 @@ cmake
|
||||||
В файле с программой подключается файл с тестируемым алгоритмом, который используется в коде программы:
|
В файле с программой подключается файл с тестируемым алгоритмом, который используется в коде программы:
|
||||||
```C++
|
```C++
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "../include/algo.h"
|
#include "../include/algos.h"
|
||||||
|
|
||||||
void swap(char* a, char* b);
|
void swap(char* a, char* b);
|
||||||
|
|
||||||
|
@ -56,7 +56,7 @@ user@debian: ./build/bin/prog
|
||||||
a=-11; b=15
|
a=-11; b=15
|
||||||
a=15; b=-11
|
a=15; b=-11
|
||||||
```
|
```
|
||||||
### include/algo.h
|
### include/algos.h
|
||||||
Подключаемый в код программ и тестов заголовочный файл должен содержать только одно объявление функций:
|
Подключаемый в код программ и тестов заголовочный файл должен содержать только одно объявление функций:
|
||||||
```C++
|
```C++
|
||||||
#ifndef algos
|
#ifndef algos
|
||||||
|
@ -66,7 +66,7 @@ void swap(char* a, char* b);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
```
|
```
|
||||||
### include/algo.c
|
### include/algos.c
|
||||||
файл с реализацией лаконичен:
|
файл с реализацией лаконичен:
|
||||||
```C++
|
```C++
|
||||||
#include "algos.h"
|
#include "algos.h"
|
||||||
|
@ -118,7 +118,7 @@ include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
|
||||||
conan_basic_setup()
|
conan_basic_setup()
|
||||||
|
|
||||||
# test executable
|
# test executable
|
||||||
add_executable(check tests/test.cpp include/algo.h include/algo.c)
|
add_executable(check tests/test.cpp include/algos.h include/algos.c)
|
||||||
target_link_libraries(check ${CONAN_LIBS} gtest_main)
|
target_link_libraries(check ${CONAN_LIBS} gtest_main)
|
||||||
|
|
||||||
# let make know we use tests
|
# let make know we use tests
|
||||||
|
@ -126,13 +126,13 @@ include(GoogleTest)
|
||||||
gtest_discover_tests(check)
|
gtest_discover_tests(check)
|
||||||
|
|
||||||
# application executable
|
# application executable
|
||||||
add_executable(prog src/main.c include/algo.h include/algo.c)
|
add_executable(prog src/main.c include/algos.h include/algos.c)
|
||||||
```
|
```
|
||||||
## Запуск
|
## Запуск
|
||||||
Запуск осуществляется из папки `build`, соответственно:
|
Запуск осуществляется из папки `build`, соответственно:
|
||||||
- `conan install ..` (установить зависимости conan, описанные в файле папкой выше)
|
- `conan install ..` (установить зависимости conan, описанные в файле папкой выше)
|
||||||
- `cmake ..` (подготовить Makefile по правилам из файла папкой выше)
|
- `cmake ..` (подготовить Makefile по правилам из файла папкой выше)
|
||||||
- `make` (собрать проект)
|
- `make`/`ninja` (собрать проект)
|
||||||
- `ctest` (запустить тесты)
|
- `ctest` (запустить тесты)
|
||||||
- `./bin/prog` (запустить программу)
|
- `./bin/prog` (запустить программу)
|
||||||
В результате запуска тестов получится следующий вывод:
|
В результате запуска тестов получится следующий вывод:
|
||||||
|
@ -147,3 +147,88 @@ Test project /home/user/Documents/book-c-basic/build
|
||||||
|
|
||||||
Total Test time (real) = 0.01 sec
|
Total Test time (real) = 0.01 sec
|
||||||
```
|
```
|
||||||
|
## Сборка артефакта
|
||||||
|
Данная часть руководства рассматривается в случае, если собранные артефакты не предназначены под конфигурацию Вашей ОС. В качестве примера создаётся артефакт **GTest** под **MinGW**, который отсутствует на данный момент на офф репозиториях **conan center**.
|
||||||
|
|
||||||
|
* Инициализация репозитория в папке, где будет находиться скаченный с Интернета проект;
|
||||||
|
* Скачать **.zip git googletest**;
|
||||||
|
* Распаковать в папку, где инициализирован репозиторий;
|
||||||
|
* Создать проект на внутреннем **gitlab** и заремоутить;
|
||||||
|
* Теперь нужно создать проект тестирования артефакта, **conan** позволяет уже создать готовый **sample package recipe** для тестирования после сборки артефакта;
|
||||||
|
* Создание рецепта пакета (package recipe) - `conan create . testg/testing`;
|
||||||
|
* После чего появится следующий проект:
|
||||||
|
```
|
||||||
|
- Project/
|
||||||
|
-- test_package/
|
||||||
|
--- CMakeLists.txt
|
||||||
|
--- conanfile.txt
|
||||||
|
--- example.cpp
|
||||||
|
-- conanfile.py
|
||||||
|
```
|
||||||
|
* Поменять во внешнем файле **conanfile(py)** в методе `source` команды `git clone` ссылку на соответствующий проект, а также следующие изменения в данном файле:
|
||||||
|
|
||||||
|
В методе `source` поменять название проекта и путь до CMakeLists.txt:
|
||||||
|
```python
|
||||||
|
tools.replace_in_file("hello/CMakeLists.txt", "PROJECT(HelloWorld)",
|
||||||
|
'''PROJECT(HelloWorld)
|
||||||
|
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
|
||||||
|
conan_basic_setup()''')
|
||||||
|
```
|
||||||
|
На:
|
||||||
|
```python
|
||||||
|
tools.replace_in_file("googletest/CMakeLists.txt", "project(googletest-distribution)",
|
||||||
|
'''project(googletest-distribution)
|
||||||
|
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
|
||||||
|
conan_basic_setup()''')
|
||||||
|
```
|
||||||
|
|
||||||
|
В методе `build` меняем соурс папку:
|
||||||
|
```python
|
||||||
|
def build(self):
|
||||||
|
cmake = CMake(self)
|
||||||
|
cmake.configure(source_folder="hello")
|
||||||
|
cmake.build()
|
||||||
|
```
|
||||||
|
На:
|
||||||
|
```python
|
||||||
|
def build(self):
|
||||||
|
cmake = CMake(self)
|
||||||
|
cmake.configure(source_folder="googletest")
|
||||||
|
cmake.build()
|
||||||
|
```
|
||||||
|
|
||||||
|
В методе `package` изменить название папки и пути до заголовков:
|
||||||
|
```python
|
||||||
|
def package(self):
|
||||||
|
self.copy("*.h", dst="include", src="hello")
|
||||||
|
self.copy("*hello.lib", dst="lib", keep_path=False)
|
||||||
|
self.copy("*.dll", dst="bin", keep_path=False)
|
||||||
|
self.copy("*.so", dst="lib", keep_path=False)
|
||||||
|
self.copy("*.dylib", dst="lib", keep_path=False)
|
||||||
|
self.copy("*.a", dst="lib", keep_path=False)
|
||||||
|
```
|
||||||
|
На:
|
||||||
|
```python
|
||||||
|
def package(self):
|
||||||
|
self.copy("*.h", dst="include/gtest", src="googletest/googletest/include/gtest")
|
||||||
|
self.copy("*gtest.lib", dst="lib", keep_path=False)
|
||||||
|
self.copy("*.dll", dst="bin", keep_path=False)
|
||||||
|
self.copy("*.so", dst="lib", keep_path=False)
|
||||||
|
self.copy("*.dylib", dst="lib", keep_path=False)
|
||||||
|
self.copy("*.a", dst="lib", keep_path=False)
|
||||||
|
```
|
||||||
|
|
||||||
|
Последний метод будет `package_info`:
|
||||||
|
```python
|
||||||
|
def package_info(self):
|
||||||
|
self.cpp_info.libs = ["hello"]
|
||||||
|
```
|
||||||
|
На:
|
||||||
|
```python
|
||||||
|
def package_info(self):
|
||||||
|
self.cpp_info.libs = ["gtest"]
|
||||||
|
```
|
||||||
|
* После выполнения настроек **.py** файла можно выполнить - `conan create . testg/testing`;
|
||||||
|
* Затем, можно выполнить `upload` артефакта и использовать его по мануалу, который описан выше. Лабо можно использовать данный артефакт локально, conan автоматически вначале проверяет cache, и только потом обращается в remote, где указаны соответствующие ссылки (в нашем случае на Nexus).
|
||||||
|
|
||||||
|
Также хотелось бы упомянуть один нюанс. Если Вы загружаете уже собранный артефакт, убедитесь, что в файле conan'а настроек конфигураций не были сбиты пути в `[env]` разделе. Была ситуация, когда был загружен артефакт, собранный на ОС GNU Linux, и в данном файле изменились пути под вид данной ОС (C:\MinGW... -> /c/MinGW/).
|
Loading…
Reference in New Issue