CommonAPI-Examples For Windows

CommonAPI-Examples For Windows

Tags
CommonAPI
SOME/IP
Published
Published May 13, 2022
Author
wapeasy

背景:

我们之前已经将CommonAPI和vsomeip的基础库都做成了,现在我们要来检证一下这些库在win平台上是否可以正常运行,所以我就需要使用CommonAPI Example作为Demo进行实验。

调查:

老规矩,让我先看一下CMakeLIsts.txt
if ("${USE_INSTALLED_COMMONAPI}" STREQUAL "ON") FIND_PACKAGE(CommonAPI 3.2.0 REQUIRED CONFIG NO_CMAKE_PACKAGE_REGISTRY) FIND_PACKAGE(CommonAPI-DBus 3.2.0 REQUIRED CONFIG NO_CMAKE_PACKAGE_REGISTRY) else() FIND_PACKAGE(CommonAPI 3.2.0 REQUIRED CONFIG NO_SYSTEM_ENVIRONMENT_PATH NO_CMAKE_SYSTEM_PATH) FIND_PACKAGE(CommonAPI-DBus 3.2.0 REQUIRED CONFIG NO_SYSTEM_ENVIRONMENT_PATH NO_CMAKE_SYSTEM_PATH) endif()
这里用到了CommonAPI的库。
# SOME/IP find_package (CommonAPI-SomeIP 3.2.0 REQUIRED) find_package (vsomeip3 3.1.0 REQUIRED)
这里用到了CommonAPI-SomeIP的库和vsomeip3的库。
# Boost find_package( Boost 1.54 COMPONENTS system thread log REQUIRED )
这里用到了Boost的库
另外需要注意到,CMakeLIsts里面还会用到很多DBus的库,本次我们只编译someip的,所以DBus相关的内容需要注释掉
以上的这些库,我们在之前的篇章已经做成了,让我们继续:
# Source Files set(PRJ_SRC_PATH src) set(PRJ_SRC_GEN_PATH src-gen) set(PRJ_SRC_GEN_COMMONAPI_PATH ${PRJ_SRC_GEN_PATH}/core/v0/commonapi/examples) # set(PRJ_SRC_GEN_COMMONAPI_DBUS_PATH ${PRJ_SRC_GEN_PATH}/dbus/v0/commonapi/examples) set(PRJ_SRC_GEN_COMMONAPI_SOMEIP_PATH ${PRJ_SRC_GEN_PATH}/someip/v0/commonapi/examples)
这个地方需要注意,官方的CMakeLists里面追加使用CommonAPI工具生成代码的命令,所以我们要修改一下,将生成代码的动作在cmake中就执行了,要不cmake会报错。
生成器,我们使用官方已经编译好的。
1、CommonAPI Gen工具:
None 15681 Dec 1 2020 artifacts.xml None 69232 Dec 1 2020 commonapi-core-generator-linux-x86 None 223 Dec 1 2020 commonapi-core-generator-linux-x86.ini None 73064 Dec 1 2020 commonapi-core-generator-linux-x86_64 None 226 Dec 1 2020 commonapi-core-generator-linux-x86_64.ini None 111616 Dec 1 2020 commonapi-core-generator-windows-x86.exe None 225 Dec 1 2020 commonapi-core-generator-windows-x86.ini None 122368 Dec 1 2020 commonapi-core-generator-windows-x86_64.exe None 228 Dec 1 2020 commonapi-core-generator-windows-x86_64.ini None 0 Dec 1 2020 commonapi-core-generator.app None 42359803 May 13 11:41 commonapi_core_generator.zip None 0 Dec 1 2020 configuration None 0 Dec 1 2020 features None 0 Dec 1 2020 plugins
我们使用commonapi-core-generator-windows-x86_64.exe这个工具进行代码生成
使用方法:
notion image
notion image
文档所在路径:
2、CommonAPI SomeIP Gen工具:
使用文档:
接下来我们修改CMakeLists.txt
# Source Files set(PRJ_SRC_PATH src) set(PRJ_SRC_GEN_PATH src-gen) set(PRJ_SRC_GEN_COMMONAPI_PATH ${PRJ_SRC_GEN_PATH}/core/v0/commonapi/examples) # set(PRJ_SRC_GEN_COMMONAPI_DBUS_PATH ${PRJ_SRC_GEN_PATH}/dbus/v0/commonapi/examples) set(PRJ_SRC_GEN_COMMONAPI_SOMEIP_PATH ${PRJ_SRC_GEN_PATH}/someip/v0/commonapi/examples) set(PRJ_NAME_CLIENT ${PRJ_NAME}Client) set(PRJ_NAME_SERVICE ${PRJ_NAME}Service) set(COMMONAPI_GEN commonapi-core-generator-windows-x86_64.exe) set(COMMONAPI_SOMEIP_GEN commonapi-someip-generator-windows-x86_64.exe) set(fidl ${CMAKE_CURRENT_SOURCE_DIR}/fidl/E01HelloWorld.fidl) set(fdepl ${CMAKE_CURRENT_SOURCE_DIR}/fidl/E01HelloWorld-SomeIP.fdepl) execute_process( COMMAND ${COMMONAPI_GEN} -ll quiet -sk -pf -d ${CMAKE_CURRENT_SOURCE_DIR}/${PRJ_SRC_GEN_PATH}/core ${fidl} ) execute_process( COMMAND ${COMMONAPI_SOMEIP_GEN} -ll quiet -pf -d ${CMAKE_CURRENT_SOURCE_DIR}/${PRJ_SRC_GEN_PATH}/someip ${fdepl} )
追加 CommonAPI和vsomeip的库路径,让find_package可以找到:
set(BOOST_ROOT "C:/Project/Boost") set(Boost_INCLUDE_DIR "C:/Project/Boost/include/boost-1_69") set(CommonAPI_ROOT "C:/Project/capicxx-core-runtime") set(CommonAPI-SomeIP_ROOT "C:/Project/capicxx-someip-runtime") set(vsomeip3_ROOT "C:/Project/vsomeip3") if ("${USE_INSTALLED_COMMONAPI}" STREQUAL "ON") FIND_PACKAGE(CommonAPI 3.2.0 REQUIRED CONFIG NO_CMAKE_PACKAGE_REGISTRY) # FIND_PACKAGE(CommonAPI-DBus 3.2.0 REQUIRED CONFIG NO_CMAKE_PACKAGE_REGISTRY) else() FIND_PACKAGE(CommonAPI 3.2.0 REQUIRED CONFIG NO_SYSTEM_ENVIRONMENT_PATH NO_CMAKE_SYSTEM_PATH) # FIND_PACKAGE(CommonAPI-DBus 3.2.0 REQUIRED CONFIG NO_SYSTEM_ENVIRONMENT_PATH NO_CMAKE_SYSTEM_PATH) endif()

编译:

下把源码库clone下来:
git clone https://github.com/wapeasy/commonapi-examples-for-windows.git cd commonapi-examples-for-windows cd CommonAPI-Examples cd E01HelloWorld mkdir build cd build
打开vs 2015 的专用cmd命令环境,继续使用cmake生成makefile:
cmake -G "NMake Makefiles" ../ -DUSE_INSTALLED_COMMONAPI=OFF nmake
如果你足够幸运,你会得到如下:
None 0 Jun 8 10:31 . None 0 May 13 16:07 .. None 22299 Jun 8 10:30 CMakeCache.txt None 0 Jun 8 10:31 CMakeFiles None 564736 Jun 8 10:31 E01HelloWorld-someip.dll None 28107 Jun 8 10:31 E01HelloWorld-someip.exp None 2584524 Jun 8 10:31 E01HelloWorld-someip.ilk None 48072 Jun 8 10:31 E01HelloWorld-someip.lib None 7221248 Jun 8 10:31 E01HelloWorld-someip.pdb None 188928 Jun 8 10:31 E01HelloWorldClient.exe None 4992 Jun 8 10:31 E01HelloWorldClient.exp None 945504 Jun 8 10:31 E01HelloWorldClient.ilk None 9138 Jun 8 10:31 E01HelloWorldClient.lib None 2641920 Jun 8 10:31 E01HelloWorldClient.pdb None 190464 Jun 8 10:31 E01HelloWorldService.exe None 7085 Jun 8 10:31 E01HelloWorldService.exp None 1073356 Jun 8 10:31 E01HelloWorldService.ilk None 12742 Jun 8 10:31 E01HelloWorldService.lib None 2658304 Jun 8 10:31 E01HelloWorldService.pdb None 16443 Jun 8 10:30 Makefile None 1560 Jun 8 10:30 cmake_install.cmake
到此,CommonAPI + SomeIP 的Windows平台已经搭建完了,祝你们好运