dev(SF-242): added --version option
This commit is contained in:
parent
86d1193cf9
commit
63c4e8119e
@ -40,13 +40,52 @@ if(DEFINED BOARD)
|
||||
include(${SITARA_DEPOT}/compile/sitara_compile_flags.cmake)
|
||||
endif()
|
||||
|
||||
# <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> nlohman json <EFBFBD> GCC7.1
|
||||
# Подгружаем внешние репозитории
|
||||
include(FetchContent)
|
||||
include(RepositoryPath.cmake)
|
||||
|
||||
FetchContent_Declare(
|
||||
cxxopts
|
||||
GIT_REPOSITORY ${cxxopts_path}
|
||||
GIT_TAG master
|
||||
)
|
||||
FetchContent_GetProperties(cxxopts)
|
||||
if(NOT cxxopts_POPULATED)
|
||||
FetchContent_Populate(cxxopts)
|
||||
add_subdirectory(${cxxopts_SOURCE_DIR} ${cxxopts_BINARY_DIR})
|
||||
endif()
|
||||
|
||||
|
||||
# Получаем информацию о последнем Git Tag.
|
||||
execute_process(
|
||||
COMMAND ${GIT_EXECUTABLE} describe --tags --abbrev=0
|
||||
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
|
||||
OUTPUT_VARIABLE GIT_TAG
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
|
||||
# Получаем информацию о текущем коммите.
|
||||
execute_process(
|
||||
COMMAND ${GIT_EXECUTABLE} show-ref --head -s -- "head"
|
||||
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
|
||||
OUTPUT_VARIABLE GIT_HEAD
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
|
||||
# Определяем сведения о версии.
|
||||
set(GIT_VERSION_INFO GIT_TAG="${GIT_TAG}" GIT_HEAD="${GIT_HEAD}")
|
||||
|
||||
|
||||
# убирает предупреждение nlohman json о GCC7.1
|
||||
add_compile_options(-Wno-psabi)
|
||||
|
||||
#<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> undefined reference pthread, <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
|
||||
#Если не собирается с ошибкой линкера undefined reference pthread, то добавить флаг линкера:
|
||||
#add_link_options(-lrt)
|
||||
add_executable(${TARGET_NAME} ./main.cpp ${SRC_FILES})
|
||||
|
||||
# Записываем сведения о версии.
|
||||
target_compile_definitions(${TARGET_NAME} PRIVATE ${GIT_VERSION_INFO})
|
||||
|
||||
target_include_directories(${TARGET_NAME} PRIVATE
|
||||
./
|
||||
${INC_DIRS}
|
||||
@ -56,14 +95,23 @@ target_include_directories(${TARGET_NAME} PRIVATE
|
||||
)
|
||||
|
||||
if (CMAKE_BUILD_TYPE STREQUAL Debug)
|
||||
set(LIB_LIST profinetd osald ${Boost_LIBRARIES})
|
||||
set(LIB_LIST
|
||||
profinetd
|
||||
osald
|
||||
${Boost_LIBRARIES}
|
||||
cxxopts)
|
||||
elseif(CMAKE_BUILD_TYPE STREQUAL Release)
|
||||
set(LIB_LIST profinet osal ${Boost_LIBRARIES})
|
||||
set(LIB_LIST
|
||||
profinet
|
||||
osal
|
||||
${Boost_LIBRARIES}
|
||||
cxxopts)
|
||||
endif()
|
||||
|
||||
# <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> nlohman json <EFBFBD> GCC7.1
|
||||
# убирает предупреждение nlohman json о GCC7.1
|
||||
add_compile_options(-Wno-psabi)
|
||||
|
||||
|
||||
set(LIB_ARCH_DIR x86_64)
|
||||
|
||||
if(DEFINED BOARD)
|
||||
@ -82,10 +130,10 @@ endif()
|
||||
|
||||
target_link_directories(${TARGET_NAME} PUBLIC ${LINK_PATH})
|
||||
|
||||
#<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> undefined reference pthread, <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ${Boost_LIBRARIES} <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> pthread <EFBFBD><EFBFBD><EFBFBD> -lpthread:
|
||||
#Если не собирается с ошибкой линкера undefined reference pthread, то после ${Boost_LIBRARIES} добавить pthread или -lpthread:
|
||||
#target_link_libraries (${TARGET_NAME} PUBLIC profinet osal ${Boost_LIBRARIES} pthread)
|
||||
|
||||
# <EFBFBD><EFBFBD><EFBFBD> BeagleBoneAI: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> GCC8 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> stdc++fs(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <filesystem>)
|
||||
# Для BeagleBoneAI: версия GCC8 нужно указывать stdc++fs(библиотека <filesystem>)
|
||||
if (CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9)
|
||||
set(LIB_LIST ${LIB_LIST} stdc++fs)
|
||||
endif()
|
||||
@ -98,13 +146,13 @@ install(
|
||||
)
|
||||
|
||||
install(FILES
|
||||
# <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
# <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> pnet <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> fork <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> exit <EFBFBD>
|
||||
# <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
# Копирование заглушки скрипта установки параметров сети.
|
||||
# Если не копировать, то в недрах pnet после fork вызовется exit и
|
||||
# и вызовутся деструкторы объектов, что может привести к непредвиденным последствиям.
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/set_network_parameters
|
||||
#<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#Копирование файла конфигурации
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/program_configure.json
|
||||
#<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Profinet
|
||||
#Копирование тестового файла конфигурации устройства Profinet
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/profinet_device_configure.json
|
||||
DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/bin
|
||||
)
|
||||
10
src/RepositoryPath.cmake
Normal file
10
src/RepositoryPath.cmake
Normal file
@ -0,0 +1,10 @@
|
||||
# Specify the path to dependencies' git repositories
|
||||
|
||||
cmake_path(SET cxxopts_path "git@sofdev:External/cxxopts.git")
|
||||
|
||||
if (
|
||||
NOT DEFINED cxxopts_path
|
||||
)
|
||||
|
||||
message(FATAL_ERROR "Path to the dependency git repository is not specified")
|
||||
endif()
|
||||
37
src/Version.h
Normal file
37
src/Version.h
Normal file
@ -0,0 +1,37 @@
|
||||
#ifndef UFC_ASYNCSERIALCONNECTOR_VERSION_H
|
||||
#define UFC_ASYNCSERIALCONNECTOR_VERSION_H
|
||||
|
||||
#include <string>
|
||||
|
||||
namespace asc {
|
||||
/**
|
||||
* Содержит сведения о текущей версии ПО.
|
||||
*/
|
||||
class Version {
|
||||
public:
|
||||
/**
|
||||
* Получить текущую версию.
|
||||
*/
|
||||
static std::string GetVersion(){
|
||||
return !GitTag.empty()
|
||||
? GitTag + " " + GitHead
|
||||
: GitHead;
|
||||
}
|
||||
|
||||
private:
|
||||
/**
|
||||
* Последний TAG текущей ветки.
|
||||
*/
|
||||
static const std::string GitTag;
|
||||
|
||||
/**
|
||||
* Hash текущего коммита.
|
||||
*/
|
||||
static const std::string GitHead;
|
||||
};
|
||||
}
|
||||
|
||||
const std::string asc::Version::GitTag = GIT_TAG;
|
||||
const std::string asc::Version::GitHead = GIT_HEAD;
|
||||
|
||||
#endif // UFC_ASYNCSERIALCONNECTOR_VERSION_H
|
||||
26
src/main.cpp
26
src/main.cpp
@ -2,14 +2,40 @@
|
||||
#include "profinet.hpp"
|
||||
#include <thread>
|
||||
#include <iostream>
|
||||
#include <cxxopts.hpp>
|
||||
|
||||
#include "program_config.hpp"
|
||||
#include "app.hpp"
|
||||
#include "Version.h"
|
||||
|
||||
App app;
|
||||
|
||||
int main(int argc, char * argv[])
|
||||
{
|
||||
cxxopts::Options options(
|
||||
"ProfinetConnector",
|
||||
"Profinet io device driver. Designed for profinet controller interaction via ethernet\n"
|
||||
);
|
||||
|
||||
options.set_width(160);
|
||||
|
||||
options.add_options()
|
||||
("help", "Display this help", cxxopts::value<bool>()->default_value("false"))
|
||||
("version", "Show git head commit and tag", cxxopts::value<bool>()->default_value("false"));
|
||||
|
||||
auto result = options.parse(argc, argv);
|
||||
|
||||
if (result["help"].as<bool>()) {
|
||||
return not(std::cout << options.help() << std::endl);
|
||||
}
|
||||
|
||||
// Выводим информацию о текущей версии.
|
||||
if (result["version"].as<bool>()) {
|
||||
std::cout << "version: " << asc::Version::GetVersion() << std::endl;
|
||||
return 0;
|
||||
}
|
||||
|
||||
//
|
||||
app.Init("program_configure.json");
|
||||
|
||||
app.Run();
|
||||
|
||||
Loading…
Reference in New Issue
Block a user