VS2022 CMake报错解决小结

这篇具有很好参考价值的文章主要介绍了VS2022 CMake报错解决小结。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、问题背景

二、问题分析

三、问题解决


一、问题背景

       VS2022中能够跨平台的工程类型就是CMake项目,一套代码能跨windows/Linux/Mac多种操作系统。而实际使用时,发现相关资料比较少,需要摸索一下。

VS2022 CMake报错解决小结,visual studio,c++,linux,cmake

 碰到的问题简述:

VS2022 CMake报错解决小结,visual studio,c++,linux,cmake

 文章来源地址https://www.toymoban.com/news/detail-654773.html

1、C++ Intellisense信息可能过时,生成要刷新的CMake缓存。

2、多次定义了变量 CMAKE_INSTALL_PREFIX

3、CMake Error: CMake was unable to find a build program corresponding to "Ninja".  CMAKE_MAKE_PROGRAM is not set.  You probably need to select a different build tool.  4、CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage    

5、CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage         

 二、问题分析

CMake工程中最重要的文件就是CMakeLists文件,其包含工程所有需要的元素,例如下面这个demo。直接用CMakeLists会觉得难用;但用了makefile再用这个就觉得CMakeLists十分友好了。

# CMakeList.txt: CMakeProject1 的 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 ("CMakeProject1")

# 将源代码添加到此项目的可执行文件。
add_executable (CMakeProject1 "CMakeProject1.cpp" "CMakeProject1.h")

if (CMAKE_VERSION VERSION_GREATER 3.12)
  set_property(TARGET CMakeProject1 PROPERTY CXX_STANDARD 20)
endif()

# TODO: 如有需要,请添加测试并安装目标。

如果上面的demo看不懂,建议先恶补一下,不然下面的内容会比较吃力。

VS创建CMake工程时,默认会创建一个CMakePresets.json文件。

VS2022 CMake报错解决小结,visual studio,c++,linux,cmake

 例如本地计算机的x64-Debug工程属性由下面的json片段来描述。这个片段把CMake要用的c/c++编译器进行了定义(cl.exe)。

       {
            "name": "windows-base",
            "hidden": true,
            "generator": "Ninja",
            "binaryDir": "${sourceDir}/out/build/${presetName}",
            "installDir": "${sourceDir}/out/install/${presetName}",
            "cacheVariables": {
                "CMAKE_C_COMPILER": "cl.exe",
                "CMAKE_CXX_COMPILER": "cl.exe"
            },
            "condition": {
                "type": "equals",
                "lhs": "${hostSystemName}",
                "rhs": "Windows"
            }
        },
        {
            "name": "x64-debug",
            "displayName": "x64 Debug",
            "inherits": "windows-base",
            "architecture": {
                "value": "x64",
                "strategy": "external"
            },
            "cacheVariables": {
                "CMAKE_BUILD_TYPE": "Debug"
            }
        }

然而,这个json文件对于linux和mac的描述则不完整,以下为linux-debug工程属性,其中对c/c++编译器没有定义。

{
    "name": "linux-debug",
    "displayName": "Linux Debug",
    "generator": "Ninja",
    "binaryDir": "${sourceDir}/out/build/${presetName}",
    "installDir": "${sourceDir}/out/install/${presetName}",
    "cacheVariables": {
        "CMAKE_BUILD_TYPE": "Debug"
    },
    "condition": {
        "type": "equals",
        "lhs": "${hostSystemName}",
        "rhs": "Linux"
    },
    "vendor": {
        "microsoft.com/VisualStudioRemoteSettings/CMake/1.0": {
            "sourceDir": "$env{HOME}/.vs/$ms{projectDirName}"
        }
    }
}

这就是把本地计算机工程改为远程Linux工程时,vs报错的原因了。猜想vs的开发工程师在做这个功能时,只针对本地window环境编写了完整的CMakePresets.json,而针对其他平台只写了一段参考,其实现并不完整,需要用户手动配置缺失部分。例如,配置Linux系统中CMake用到的c/c++编译器,Ninjia路径等。可以参考一下官方的文档

使用 CMake 预设进行配置和生成 | Microsoft Learn

三、问题解决

有了第二部分的分析,解决问题的思路就有了,把相关的配置补充完整。

首先,补充c/c++编译器,linux机器上已经装了gcc/g++,直接填好就可以了。

(如果没有安装需要在linux安装一下 apt install gcc g++)

        {
            "name": "linux-debug",
            "displayName": "Linux Debug",
            "generator": "Ninja",
            "binaryDir": "${sourceDir}/out/build/${presetName}",
            "installDir": "${sourceDir}/out/install/${presetName}",
          "cacheVariables": {
            "CMAKE_BUILD_TYPE": "Debug",
            "CMAKE_C_COMPILER": "gcc",
            "CMAKE_CXX_COMPILER": "g++"
          }

改了以后,这两个报错没有了。

4、CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage    

5、CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage  

VS2022 CMake报错解决小结,visual studio,c++,linux,cmake

 上面的错误显示查询ninja版本号时失败了。装一个ninja:

sudo apt install ninja-build

安装完成后,回到vs中,按ctrl+S,保存工程时,会自动再次构建工程,发现构建成功。

VS2022 CMake报错解决小结,visual studio,c++,linux,cmake

最后,虽然构建成功了,实际上有个错误最后还是没有解决,即使它不影响工程的构建结果。

多次定义了变量 CMAKE_INSTALL_PREFIX

从构建日志看出,CMAKE_INSTALL_PREFIX,确实定义了两次。感觉这就是vs的一个bug,有博友知道如何解决,请评论告知,十分感谢。

/usr/bin/cmake -G "Ninja"   -DCMAKE_BUILD_TYPE:STRING="Debug" -DCMAKE_C_COMPILER:STRING="gcc" -DCMAKE_CXX_COMPILER:STRING="g++" -DCMAKE_INSTALL_PREFIX:PATH="/root/.vs/CMakeProject1/out/install/linux-debug"   -DCMAKE_INSTALL_PREFIX:PATH="/root/.vs/CMakeProject1/out/install/linux-debug"  /root/.vs/CMakeProject1/CMakeLists.txt

 

到了这里,关于VS2022 CMake报错解决小结的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • vs2017实现linux远程编译报错“CMake 缺少以下功能:serverMode“解决方案

    背景 window系统vs2017使用cmake实现linux远程调试和编译时,搭建的环境报 CMake 缺少以下功能:“serverMode”。请参阅 https://aka.ms/linuxcmakeconfig 了解详细信息 错误,如何解决? 经排查,发现远程开发环境的cmake版本不支持serverMode模式,因此,无法实现远程编译 解决方案 验证远程目

    2024年02月11日
    浏览(30)
  • VS2022远程Linux使用cmake开发c++工程配置方法

    VS2022远程Linux使用cmake开发c++工程配置方法

    最近使用别人在VS2015上使用visualgdb搭建的linux开发环境,各种不顺手,一会代码不能调转了,一会行号没了,调试的时候断不到正确的位置,取消的断点仍然会进。因此重新摸索了一套使用vs的远程开发方法。 使用的相关工具及技术涉及: Vs2022 Ninja g++ gcc mobaxterm等。 采用ss

    2024年02月12日
    浏览(11)
  • 通过cmake工程生成visual studio解决方案

    通过cmake工程生成visual studio解决方案

    visual studio是一个很强大的开发工具,这个工具主要是通过解决方案对我们的源码进行编译等操作。但是我们很多时候拿到的可能并不是一个直接的解决方案,可能是是一个cmake工程,那么这个时候我们就需要通过cmake工程生成解决方案,然后就可以通过visual studio进行编译和调

    2024年02月15日
    浏览(11)
  • Visual Studio连接Linux服务器编译CMake项目,生成在Linux上运行的程序

    Visual Studio连接Linux服务器编译CMake项目,生成在Linux上运行的程序

    window系统:Windows 10 企业版 64位操作系统 Linux系统:BigCloud Enterprise Linux 7.8 (Core) Visual Studio:Microsoft Visual Studio Enterprise 2019 版本 16.10.4 根据Microsoft官网文档介绍, 开始之前 首先,请确保已安装 Visual Studio Linux 工作负载,包括 CMake 组件。 它属于 Visual Studio 安装程序中的“使用

    2024年02月13日
    浏览(17)
  • 【libdatachannel】1 :cmake+vs2022 构建

    【libdatachannel】1 :cmake+vs2022 构建

    libdatachannel 是基于c++17实现的 cmake 链接openssl 可以参考【libcurl 】win32 构建 Release版本 修改cmakelist 链接openssl1.1.*

    2024年02月06日
    浏览(28)
  • windows下Cmake配置vs2022工程

    windows下Cmake配置vs2022工程

    我电脑安装的是vs2022但是 cmake的gui 没有vs2022的选项 只有2019 而且选择2019 生成编译环境是错的 提示 “visual studio 16 2019 could not find any instance of visual studio.” 解决方法如下 先利用vs2022创建一个cmake项目 在项目路径下执行命令 生成如下 我们再去看cmake的配置UI上看 就已经有了我

    2024年02月12日
    浏览(16)
  • visual studio 编译cmake项目

    当编译出现问题 message(FATAL_ERROR \\\"The C compilern  \\\"${CMAKE_C_COMPILER}\\\"n\\\"       \\\"is not able to compile a simple test program.nIt fails \\\"       \\\"with the following output:n  ${_output}nn\\\"       \\\"CMake will not be able to correctly generate this project.\\\") 控制台提示如下: 1 已为默认配置“x64-Debug”启动 CMake 生成

    2024年02月06日
    浏览(13)
  • 使用 Visual Studio Code 调试 CMake 脚本

    使用 Visual Studio Code 调试 CMake 脚本

    之前被引入到 Visual Studio 中的 CMake 调试器,现已在 Visual Studio Code 中可用。 也就是说,现在你可以通过在 VS Code 中安装 CMake 工具扩展,来调试你的 CMakeLists.txt 脚本了。是不是很棒? Visual C++ 开发团队和 CMake 的维护者 Kitware 一直密切合作,目的是将我们的 CMake 调试器实现集成

    2024年02月13日
    浏览(11)
  • VS2022+CMAKE+OPENCV+QT+PCL安装及环境搭建

    VS2022+CMAKE+OPENCV+QT+PCL安装及环境搭建

    VS2022安装: Visual Studio 2022安装教程(千字图文详解),手把手带你安装运行VS2022以及背景图设置_vs安装教程_我不是大叔丶的博客-CSDN博客 CMAKE配置: win11下配置vscode+cmake_心儿痒痒的博客-CSDN博客 OPENCV配置: VS2022 + Opencv4.5.5 + C++ 配置_愿飞翔的鱼儿的博客-CSDN博客 VS2022安装Im

    2024年02月09日
    浏览(13)
  • Visual Studio Code系列--CMake Tools使用说明

    Visual Studio Code系列--CMake Tools使用说明

            在linux系统上开发程序,一般都是使用vim+gcc+gdb进行的;但是为了开发效率我们也会使用Visual Studio Code进行开发,毕竟有界面的开发调试还是更加友好一些。         老牌程序员肯定都知道make构建工具,但是其晦涩的语法还是难住不少初级开发者的。那么有没有一种

    2024年02月12日
    浏览(15)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包