一、概述
想要找一个免费好用的c++开发工具。期间尝试了eclipse +CDT、VSCode+Mingw64+CMake都觉得不是很好用。最后选择了社区版的VisualStudio+CMake。之所以选择这个,是因为相对于eclipse和VSCode这个更好用。
就是使用过程中会遇到一些小问题。
二、配置
1.下载VisualStudio社区版,一般项目是够用了(学习或者研究足够了)
2.打开新建解决方案
3.创建一个CMake项目工程目录如下
先看下根文件中的CMakeLists.txt
# CMakeList.txt: 顶层 CMake 项目文件,在此处执行全局配置 # 并包含子项目。 # cmake_minimum_required (VERSION 3.8) # 如果支持,请为 MSVC 编译器启用热重载。 if (POLICY CMP0141) cmake_policy(SET CMP0141 NEW) set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT "$<IF:$<AND:$<C_COMPILER_ID:MSVC>,$<CXX_COMPILER_ID:MSVC>>,$<$<CONFIG:Debug,RelWithDebInfo>:EditAndContinue>,$<$<CONFIG:Debug,RelWithDebInfo>:ProgramDatabase>>") endif() project ("SDLDemo") # 包含子项目。 add_subdirectory ("SDLDemo")
没什么东西,主要就两句话有用
project("SDLDemo")设置项目名称
add_subdirectory:添加子项目
再看看子项目内容
include_directories("D:/opencv/opencv/build/include") link_directories("D:/opencv/opencv/build/x64/vc14/lib") # 将源代码添加到此项目的可执行文件。 add_executable (SDLDemo "SDLDemo.cpp" "SDLDemo.h") #连接动态库 target_link_libraries(SDLDemo opencv_world452d ) if (CMAKE_VERSION VERSION_GREATER 3.12) set_property(TARGET SDLDemo PROPERTY CXX_STANDARD 20) endif() # TODO: 如有需要,请添加测试并安装目标。
内容也不多:
1.也就是添加可执行文件,并设置名称及源码
2.导入opencv头文件
3.链接opencv库文件
4.链接动态库
ps:主要看上面标注为红色的部分
写一个opencv的小demo显示一张图片
#include <opencv2/opencv.hpp> using namespace std; using namespace cv; int main() { cout << "Hello CMake." << endl; Mat src = imread("E:/tony/demo/visualstudio_workspace/SDLDemo/SDLDemo/images/cat2.jpg"); if (src.empty()) { cout << "this image is empty" << endl; } //// // cvtColor(src,COLOR_BGR2GRAY); imshow("src", src); waitKey(0); return 0; }
这样其实就已经配置完了
三、遇到的问题
1.运行过程中提示“由于找不到某某.dll程序无法运行”
解决办法:在生成.exe文件的地方把opencv的.dll动态库复制进去即可,如下图所示
2.在加载imread("src","图片路径"),即使图片路径是对的也依然找不到图片。imread返回的结果是空的,导致程序运行失败。
解决办法:这是因为VisualStudio中的调试模式分为debug和release,而引用的.lib库也分debug和release。其中xxxd.lib就是debug库。xxx.lib就是release库。
所以需要根据你的调试模式选择对应的debug或者relase库和CMakeLists.txt中的target_link_librarys对应上即可
另外还有一个地方需要改一下,就剩生成.exe位置的地方,如果你是debug模式就把xxxxd.dll动态库放进去。如果你是release模式你就把xxx.dll放进去。当然也可以同时都放进去。
这样上面这个问题就可以解决
3.VisualStudio在使用第三方库的时候CMake中引入的是.lib库,而不是.dll库这点要注意一下
标签:SDLDemo,cmake,lib,dll,opencv,debug,CMake,visualstudio,小坑 From: https://www.cnblogs.com/tony-yang-flutter/p/17831307.html