visualstudio+cmake+环境配置,及使用过程中的一些小坑点

一、概述

  想要找一个免费好用的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库这点要注意一下

 

posted on 2023-11-14 11:56  飘杨......  阅读(220)  评论(0编辑  收藏  举报