文章目录
一、QT安装
二、VTK安装
三、ITK安装
四、cmake构建
4.1 cmake简介
CMake是一个跨平台的建构系统的工具,可以用简单的语句来描述所有平台的安装(编译过程)。(具体学习可以参考其他文章)
4.2 编写CMakeLists.txt
项目名称:test
在项目目录下创建CMakeLists.txt并编写
4.2.1 CMakeLists.txt详细版
cmake_minimum_required(VERSION 3.5)
project(test)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_AUTOMOC on)
set(CMAKE_AUTOUIC on)
set(CMAKE_AUTORCC on)
set(CMAKE_BUILD_TYPE Release)
# project_name
set(PROJECT_NAME test)
# qt
# 设置qt的安装目录下的cmake路径,此处由于后面把项目test容器化 所以本人将qt安装信息拷贝到test的同级目录
set(Qt6_Cmake ../base/qt/lib/cmake)
set(Qt6_DIR ${Qt6_Cmake}/Qt6)
set(Qt6Core_DIR ${Qt6_Cmake}/Qt6Core)
set(Qt6Gui_DIR ${Qt6_Cmake}/Qt6Gui)
#set(Qt6Widgets_DIR ${Qt6_Cmake}/Qt6Widgets)
set(Qt6Network_DIR ${Qt6_Cmake}/Qt6Network)
set(Qt6Qml_DIR ${Qt6_Cmake}/Qt6Qml)
set(Qt6WebSockets_DIR ${Qt6_Cmake}/Qt6WebSockets)
#set(Qt6Quick_DIR ${Qt6_Cmake}/Qt6Quick)
# 具体需要qt的包根据情况添加或删除
find_package(Qt6 COMPONENTS Core Gui Qml Network WebSockets REQUIRED)
# vtk
# 设置vtk的动态链接库的地址,同上由于后面把项目test容器化 所以将vtk动态链接库信息拷贝到test的同级目录
LINK_DIRECTORIES(../base/vtk/lib)
# 此处链接库的信息不是全部,具体可根据项目情况添加或删除
set(VTKlibs
-lvtkCommonCore-9.2
-lvtkCommonDataModel-9.2
-lvtkCommonExecutionModel-9.2
-lvtkCommonMath-9.2
-lvtkCommonTransforms-9.2
-lvtkImagingCore-9.2
-lvtkImagingGeneral-9.2
-lvtkInteractionImage-9.2
-lvtkIOImage-9.2
-lvtkRenderingCore-9.2
-lvtksys-9.2
-lvtkloguru-9.2
-lvtkCommonMisc-9.2
-lvtkCommonSystem-9.2
-lvtkpugixml-9.2
-lvtkkissfft-9.2
-lvtkImagingSources-9.2
-lvtkInteractionWidgets-9.2
-lvtkInteractionStyle-9.2
-lvtkImagingColor-9.2
-lvtkDICOMParser-9.2
-lvtkmetaio-9.2
-lvtktiff-9.2
-lvtkzlib-9.2
-lvtkjpeg-9.2
-lvtkCommonColor-9.2
-lvtkFiltersGeometry-9.2
-lvtkFiltersSources-9.2
-lvtkFiltersGeneral-9.2
-lvtkFiltersCore-9.2
-lvtkCommonComputationalGeometry-9.2
-lvtkRenderingContext2D-9.2
-lvtkFiltersHybrid-9.2
-lvtkFiltersModeling-9.2
-lvtkFiltersTexture-9.2
-lvtkRenderingAnnotation-9.2
-lvtkRenderingFreeType-9.2
-lvtkfmt-9.2
-lvtkfreetype-9.2
-lvtkpng-9.2
)
# itk
# 设置itk的动态链接库的地址,同上由于后面把项目test容器化 所以将itk动态链接库信息拷贝到test的同级目录
LINK_DIRECTORIES(../base/itk/lib)
# 此处链接库的信息不是全部,具体可根据项目情况添加或删除
set(ITKlibs
-lITKCommon-5.2
-lITKIOImageBase-5.2
-lITKIOGDCM-5.2
-lITKVTK-5.2
-lITKEXPAT-5.2
-litksys-5.2
-litkvnl-5.2
-litkdouble-conversion-5.2
-litkgdcmMSFF-5.2
-litkgdcmDICT-5.2
-litkgdcmDSED-5.2
-litkv3p_netlib-5.2
-litkgdcmjpeg8-5.2
-litkgdcmjpeg12-5.2
-litkgdcmjpeg16-5.2
-litkgdcmopenjp2-5.2
-litkgdcmcharls-5.2
-litkgdcmuuid-5.2
-litkgdcmIOD-5.2
-litkgdcmCommon-5.2
-litkzlib-5.2
-litkvnl_algo-5.2
)
# header
# 此处引入当前项目(test)工程目录下的头文件 没有则不需要 有则根据需要添加或删除
set(HEADERS
include/a1.h
include/a2.h
include/a3.h
)
# sources
# 此处引入当前项目(test)工程目录下的源文件 没有则不需要 有则根据需要添加或删除
set(SOURCES
main.cpp
a1.cpp
a2.cpp
a3.cpp
)
# resources
# 此处引入当前项目(test)工程目录下的资源文件 没有则不需要 有则根据需要添加或删除
set(RESOURCES
qml.qrc
main.qml
)
# 引入其它头文件(可包含项目本身或动态链接库的同文件)
INCLUDE_DIRECTORIES(
.
../base/qt/include
../base/qt/include/QtNetwork
../base/qt/include/QtCore
../base/qt/include/QtQml
../base/vtk/include/vtk-9.2
../base/itk/include/itk-5.2
../base/itk/vtkGlueInclude
)
add_executable(${PROJECT_NAME} ${HEADERS} ${SOURCES} ${RESOURCES})
# 引入自定义VTK的动态链接库
target_link_libraries(${PROJECT_NAME} ${VTKlibs})
# 引入自定义ITK的动态链接库
target_link_libraries(${PROJECT_NAME} ${ITKlibs})
# 引入自定义Qt的动态链接库
target_link_libraries(${PROJECT_NAME} Qt6::Core Qt6::Gui Qt6::Qml Qt6::Network Qt6::WebSockets)
4.2.2 CMakeLists.txt简单版
cmake_minimum_required(VERSION 3.5)
project(test)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_AUTOMOC on)
set(CMAKE_AUTOUIC on)
set(CMAKE_AUTORCC on)
set(CMAKE_BUILD_TYPE Release)
# project_name
set(PROJECT_NAME test)
find_package(Qt5 COMPONENTS Core Widgets REQUIRED)
find_package(VTK REQUIRED)
find_package(ITK REQUIRED)
include_directories(${ITK_INCLUDE_DIRS} ${VTK_INCLUDE_DIRS})
target_link_libraries(${PROJECT_NAME} ${ITK_LIBRARIES} ${VTK_LIBRARIES} Qt5::Core Qt5::Widgets)
4.3 编译打包
在test目录下新建build目录并进入build目录下执行:
sudo cmake ..
再执行
sudo make -j
后查看当前目录下文件发现test.sh文件则构建完成
执行:sudo ./test
创建日志文件: sudo touch info.log
后台执行: sudo nohup ./test > info.log 2>&1 &
五、容器化
5.1 编辑Dockerfile
在test同级目录创建并编写Dockerfile文件:
# FROM ubuntu
FROM amd64/ubuntu:latest
MAINTAINER chenwei <chenwei@163.com>
RUN apt-get update && apt-get install -y vim
# 当前项目test的目录进行同步映射
WORKDIR /usr/local/projects/test/build
# 拷贝当前项目
COPY ./test/ /usr/local/projects/test/
# 拷贝itk的动态链接库
COPY ./base/itk/lib/* /usr/lib/
# 拷贝vtk的动态链接库
COPY ./base/vtk/lib/* /usr/lib/
# 拷贝qt的动态链接库
COPY ./base/qt/renderLib/* /usr/lib/
# 拷贝其它的动态链接库 具体根据情况添加或删除
COPY ./base/otherlib/* /usr/lib/
CMD ./test && tail -f info.log
# CMD sh -c "touch ../config.json && echo '{\"hostIp\":\"'${hostIp}'\",\"servicePort\":'${servicePort}'}' > ../config.json && ./test && tail -f info.log"
# 项目本身容器内暴漏的端口
EXPOSE 8060
5.2 打包运行
打包成镜像:
docker build -t test:base .
运行并进入容器内:
sudo docker run -it --name test1 -p 8893:8893 test:base /bin/bash
后台运行:
sudo docker run --privileged=true --restart=always -itd --name test1 -p 8060:8060 test:base
版权声明:本文为CEVERY原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。