开发环境:
1、可以迅速处理大量并发网络数据包,ASIO库和winpcap 4.1.3库;
2、处理与显示点云模型数据,使用VTK 8.2.0库;
3、项目使用CMake+VC2017编译,GUI使用QT 5.12.5,Lib使用Boost 1.7.0与C++ 11;
4、开发工具QT Creator 4.1(VC2017辅助)、CMake 3.11.2,可以编译32位与64位版本;
工具和库的生成与配置:
1、VS2017与QT 5.12.5,CMake 3.11.2开发环境直接官网下载安装即可。
2、Boost 1.7.0官网下载库,然后编译成64位Debug与Release版本,操作参考
指令如下
b2 install --toolset=msvc-14.1 --prefix="D:\ScanSource\download\Boost\vc141" link=static runtime-link=shared threading=multi debug release
3、VTK 8.2.0官网下载源码,使用CMake-GUI工具,其中参数选择支持QT,设置QT安装路径,执行编译大概步骤如下:
QT5_DIR= C:\Qt\Qt5.12.6\5.12.6\msvc2017_64\lib\cmake\Qt5(设置QT5的目录)
CMAKE_INSTALL_PREFIX=D:\ScanSource\VTK\msvc2017_64(编译生成目录)
编译工程ALL_BUILD开始编译生成库文件(VC中选择要编译的版本,我选择64位的debug和release),完成后选择编译INSTALL,他会把库与头文件拷贝到你设置的编译生成目录中。
4、winpcap 直接使用 VeloView项目中编译后的文件,编译方法应该大体相同。
使用CMake创建项目:
QTCreator与MSVC2017都支持通过CMakeLists.txt文件创建项目,但是我发现MSVC2017的QT插件没能识别出QT项目,需要配置QT环境变量挺麻烦的,所以我最后使用QTCreator工具,工具内可以直接设置CMake参数,CMake的语法提示做的也挺好的。
CMake项目主体结构
Src/CMakeLists.txt (项目配置信息)
Src/main.cpp (项目所包含的cpp,h,cxx等等文件)
Lib (项目所需要的库文件的 Lib include)
Build (通过CMake编译出的项目文件,如果使用MSVC工具会生成工程文件,如果是QTCreator会生成一个Debug版本的对应平台的目录)
bin (我在CMakeLists.txt设定的程序生成路径,Debug与Release分开存放,包括exe、dll 、config文件等等)
使用VC2107创建项目:
1、使用QT Creator创建一个CMake版本的QWidget窗体项目,然后使用CMakeGUI根据创建的CMakeLists.txt生成VC2017项目。(我偷懒用QTCreator直接生成了)
2、在CMakeGUI上设置项目的源码目录与项目生成目录,点击Configure,选择VS2017 64位版本,点击Configure开始编译,如果CMakeLists.txt设定引用库,会提示设定该库的路径。
3、 设置QT5DIR,我的开发环境是VS2017_64,所以找到安装的对应目录C:/Qt/Qt5.12.5/5.12.5/msvc2017_64/lib/cmake/Qt5设置一下,重新配置,然后生成,然后就可以用VS2017打开项目了。
设置VTK_DIR为 D:\ScanSource\Lib\VTK-8.2.0\lib\cmake\vtk-8.2,
设置Boost_INCLUDE_DIR为D:\ScanSource\Lib\boost_1_70_0,项目就可以编译通过,然后点击 Open Project,会使用MSVC2017打开项目。CMake-GUI设置位置
使用QTCreator创建项目
qtcreator工具可以直接设置CMake的参数,执行CMake命令就可以,没有问题就可以编译项目,其中CMakeLists.txt.user就是设置的变量保存位置。
项目中引用Boost库与VTK库,并且测试
1、Boost引用
find_package(Boost 1.70.0 REQUIRED)
if(Boost_FOUND)
message(Boost_INCLUDE_DIRS " ${Boost_INCLUDE_DIRS}")
message(Boost_DIR " ${Boost_DIR}")
set(Boost_LIBRARY_DIR "D:/ScanSource/Lib/boost_1_70_0/vc141/lib")
endif()
include_directories(${Boost_INCLUDE_DIRS})
link_directories(${Boost_LIBRARY_DIR})
2、VTK引用
find_package(VTK 8.2.0 REQUIRED)
if(VTK_FOUND)
message(VTK_DIR " ${VTK_DIR}")
endif()
.
.
.
include(${VTK_USE_FILE})
target_link_libraries(appname ${VTK_LIBRARIES})
3、测试版本
#include
#include
#include
#include
static void PrintEnv()
{
std::cout << "==== DeviceLib Ver" << DEVICE_COMMON_VERSION << "===============" << std::endl;
std::cout << "扫描设备驱动库" << std::endl;
std::cout << "Boost 版本g:" << BOOST_VERSION << std::endl;
std::cout << "Boost Lib 版本:" << BOOST_LIB_VERSION << std::endl;
std::cout << "VTK 版本:" << VTK_VERSION << std::endl;
std::cout << "OS :" << BOOST_PLATFORM << std::endl;
std::cout << "编译器:" << BOOST_COMPILER << std::endl;
std::cout << "标准库:" << BOOST_STDLIB << std::endl;
std::cout << "============================" << std::endl;
}