首页 > 其他分享 >visualstudio+cmake+环境配置,及使用过程中的一些小坑点

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

时间:2023-11-14 12:12:04浏览次数:32  
标签:SDLDemo cmake lib dll opencv debug CMake visualstudio 小坑

一、概述

  想要找一个免费好用的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

相关文章

  • cmake编译介绍--cmakelist.txt
    1.cmake编译简介 单个文件编译C/C++时:gccmain.c/g++main.cpp 多代码文件时:MakeFile,解决多文件编译难问题,运行make命令编译自动完成 cmake编译引入:根据一定的规则自动生成MakeFile的,也是有语法(cmake还是依赖make编译)。自动管理makefile文件,写起来也更方便、没有makefile......
  • Windows10+VSCode+cmake+opencv+ffmpeg+sdl2环境配置
    一、概述在Windows10上配置一个C++开发环境:工具:VSCode编译器:Mingw64(使用gcc进行编译)构建工具:CMake第三方库:集成OpenCV、FFmpeg、SDL2二、操作步骤1.安装mingw64并配置bin目录到环境变量2.下载VSCode并安装3.安装CMake并......
  • 使用 VSCode+CMake+Ninja 开发RISC-V MCU
    1.安装软件及工具1.1VSCode安装VisualStudionCode(VSCode),是一款由微软开发且跨平台的免费源代码编辑器。该软件支持语法高亮、代码自动补全(又称IntelliSense)、代码重构、查看定义功能,并且内置了命令行工具和Git版本控制系统。VSCode官网VSCode官方文档官网......
  • cmake Ninja 集成试用
    核心比较简单就是添加Ninja的依赖工具,然后再构建的时候指定生成器为Ninja使用安装ninja我使用的mac系统 brewinstallninja生成前提是已经有了一个CMakeLists.tx同时还没有初始化 cmake-GNinja..效果 构建......
  • cmake内置变量总结
    一、概述在使用CMake配置CMakeLists.txt的时候,内置变量会极大的方便我们编写。所以在这里罗列出cmake常用的内置变量二、常用内置变量PROJECT_SOURCE_DIR项目根目录PROJECT_BINARY_DIR执行cmake命令的目录CMAKE_CURRENT_SOURCE_......
  • CMake多个CMakeLists.txt共同合作编译一个C++项目
    一、概述在C++项目比较大或者要根据不同的规则生成不同的执行文件或者动态库/静态库的时候。单独的CMakeLists.txt会变的比较复杂,此时可以利用CMakeLists.txt的父子关系分目录分模块的进行编译及输出。就相当于项目模块化编译参考博客:【大丙课堂】二、具体实现......
  • cmake 进行rpm包构建
    cmake实际上包含了构建,测试,以及打包的能力,以下是一个简单的rpm打包测试(cpack模块)项目结构├──CMakeLists.txt├──README.md├──add.c├──add.h└──main.c代码说明main.c为一个入口(可执行文件)CMakeLists.txt是cmake的定义......
  • Windows10+VSCode+CMake+shell脚本编译C/C++程序
    一、概述想要在Windows10上做C++验证/编译类库,借助VSCode(其实这东西要不要都行,它就是来方便查看代码的)+CMake+shell脚本做程序的编译运行。下面写一个小例子记录一下准备工作:1.编译环境用的是mingw64,使用其再带的g++编译,ps:记得要配置其环境变量2......
  • arm-eabi-none-gcc和cmake安装
    arm-none-eabi-gcc和cmake都非常重要,它们分别用于ARM架构的编译和构建。首先,arm-none-eabi-gcc是一个为ARM架构编译C/C++代码的编译器。安装它可以让你在ARM架构上编译和运行C/C++代码。其次,cmake是一个跨平台的自动化构建工具,它使用一个名为CMakeLists.txt的文件来描述构建过程。......
  • CMake实战
    CMake实战1.Preface  通过CMake来实际构建一个项目,掌握cmake的使用流程;在之前的博客!《CMake学习记录》中,介绍了Cmake相关的基础知识;2.需要注意的问题add_subdirectory存在问题file命令的使用程序版本信息设置如何指定编译时的编译器编译选项设置暂时想到这么多......