目录
6.在构建package目录下总的Config.in中添加内容如下:
一.详细步骤
1.我的存放目录为
-inc主要存放.c对应的头文件,我的主要程序在hmodbus.c common.c
2.CMakeLists.txt内容为:
cmake_minimum_required(VERSION 3.10 FATAL_ERROR)
# Set project informationadd_definitions(-DZMQ_STATIC)
project(hmi_info VERSION 1.0.4 LANGUAGES C CXX)
set(CMAKE_C_COMPILER_FORCED TRUE)
set(CMAKE_CXX_COMPILER_FORCED TRUE)include_directories(${PROJECT_SOURCE_DIR}/inc)
aux_source_directory(${PROJECT_SOURCE_DIR}/src DIR_SRCS)
#link_directories(${PROJECT_SOURCE_DIR}/lib)
message(DEBUG ${DIR_SRCS})SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
add_executable(hmodbus ${DIR_SRCS})
#target_link_libraries(hmodbus libcjson)
#target_link_libraries(hmodbus libmodbus)
set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
#指定引用的外部库的搜索路径 lib下的.so目录这样放进去# message(DEBUG ${PROJECT_SOURCE_DIR})
# 添加链接 libcjson 库
#target_link_libraries (qmodbus -libcjson)
#target_link_libraries(qmodbus -libmodbus)#设置bin文件的输出路径
#SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)target_link_libraries (hmodbus hv)
target_link_libraries (hmodbus zmq)#target_link_libraries (hmodbus ${PROJECT_SOURCE_DIR}/lib)
#target_link_libraries (hmodbus zmq.so)
#target_link_libraries (hmodbus libhv.so)
target_link_libraries(hmodbus pthread)
install(TARGETS hmodbus DESTINATION bin)#设置交叉编译链
#set(CMAKE_SYSTEM_NAME Linux)
#SET(CMAKE_C_COMPILER /opt/zlg/m3568-sdk-v1.0.0-ga/gcc-buildroot-9.3.0-2020.03-x86_64_aarch64-rockchip-linux-gnu/bin/aarch64-linux-gcc.br_real)
#SET(CMAKE_CXX_COMPILER /opt/zlg/m3568-sdk-v1.0.0-ga/gcc-buildroot-9.3.0-2020.03-x86_64_aarch64-rockchip-linux-gnu/bin/aarch64-linux-g++.br_real)
#set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pthread")
#SET(CMAKE_C_COMPILER aarch64-linux-gcc)
#SET(CMAKE_CXX_COMPILER aarch64-linux-g++)
3.app的构建package存放的位置及内容如下:
4.hm_info.mk
################################################################################
#
# hmi_info
#
################################################################################HMI_INFO_VERSION = 1.0.4
HMI_INFO_SITE = $(TOPDIR)/../app/hmi_info
HMI_INFO_SITE_METHOD = localHMI_INFO_INSTALL_STAGING = YES
AMODBUS_DEPENDENCIES += zeromq libmodbus libcjson
# 增加你想要的一些lib的路径 我还得添加modbus,cjson,zeromq ---- $(TARGET_DIR)/usr/lib $(TARGET_DIR)/usr/include libzmq
#AMODBUS_CFLAGS += -I$(STAGING_DIR)/usr/include #根目录下.c文件
#AMODBUS_LDFLAGS += -L$(STAGING_DIR)/usr/lib #根目录下.so
#AMODBUS_LDADD += -lzmq -lmodbus -lcjson #这个东西放在哪里才能确定链接器能够找到它们$(eval $(cmake-package)) #放在cmake-package里面还是其它位置里有讲究
#define AMODBUS_BUILD_CMDS
# $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) $(AMODBUS_MAKE_OPTS)
#endef#define AMODBUS_INSTALL_TARGET_CMDS
# $(INSTALL) -D -m 755 $(@D)/amodbus $(TARGET_DIR)/usr/bin/amodbus
#endef
5.Config.in
config BR2_PACKAGE_HMI_INFO
bool "hmi_info"
select BR2_PACKAGE_ZEROMQ
select BR2_PACKAGE_LIBMODBUS
select BR2_PACKAGE_CJSON
default y
help
hmi_info
6.在构建package目录下总的Config.in中添加内容如下:
内容详细如下:
menu "Daniel private app package"
source "package/helloworld/Config.in"
endmenumenu "Compile Modbus RTU"
source "package/hmi_info/Config.in"
endmenu
编译根文件系统。/build.sh rootfs,在以下目录下生成的交叉编译的可执行文件
7.编译文件系统
运行脚本,输入1
8.file hmodbus 可以看到是在arm运行环境下
二.参考文献
1.CMake使用笔记 配合libmodbus 分别编译出x86的服务器版本和arm的嵌入式linux版本