visualstudio+cmake+环境配置,及使用过程中的一些小坑点
一、概述
想要找一个免费好用的c++开发工具。期间尝试了eclipse +CDT、VSCode+Mingw64+CMake都觉得不是很好用。最后选择了社区版的VisualStudio+CMake。之所以选择这个,是因为相对于eclipse和VSCode这个更好用。
就是使用过程中会遇到一些小问题。
二、配置
1.下载VisualStudio社区版,一般项目是够用了(学习或者研究足够了)
2.打开新建解决方案
3.创建一个CMake项目工程目录如下
先看下根文件中的CMakeLists.txt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | # 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显示一张图片
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #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库这点要注意一下
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
· PowerShell开发游戏 · 打蜜蜂
· 凌晨三点救火实录:Java内存泄漏的七个神坑,你至少踩过三个!
2014-11-14 Unable to execute dex: Multiple dex files defineLcom/google/gson/JsonDeserializer;
2014-11-14 Android 工程引入自定义Library后,工程无法识别Library中的类