随笔 - 632  文章 - 17  评论 - 54  阅读 - 92万

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库这点要注意一下

 

posted on   飘杨......  阅读(588)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.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中的类
< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

点击右上角即可分享
微信分享提示