CMake

Win11运行cl.exe:

配置环境变量

  • Path:
    • C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.34.31933\bin\Hostx64\x64
    • C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\IDE
    • %INCLUDE%
    • %LIB%
  • INCLUDE:
    • C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.34.31933\include
    • C:\Program Files (x86)\Windows Kits\10\Include\10.0.22000.0\cppwinrt
    • C:\Program Files (x86)\Windows Kits\10\Include\10.0.22000.0\shared
    • C:\Program Files (x86)\Windows Kits\10\Include\10.0.22000.0\ucrt
    • C:\Program Files (x86)\Windows Kits\10\Include\10.0.22000.0\um
    • C:\Program Files (x86)\Windows Kits\10\Include\10.0.22000.0\winrt
  • LIB:
    • C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.34.31933\lib\x64
    • C:\Program Files (x86)\Windows Kits\10\Lib\10.0.22000.0\ucrt\x64
    • C:\Program Files (x86)\Windows Kits\10\Lib\10.0.22000.0\ucrt_enclave\x64
    • C:\Program Files (x86)\Windows Kits\10\Lib\10.0.22000.0\um\x64
这里有个小技巧,%不能出现在第一个,要不然环境变量将不会以列表的方式呈现,如果已经是一行了,可以在最前面加个;分号

cmd > cl.exe

cl.exe C:\Users\Administrator\CLionProjects\untitled\main.cpp
cl /EHsc C:\Users\Administrator\CLionProjects\untitled\main.cpp
cl.exe /EHsc C:\Users\Administrator\CLionProjects\untitled\main.cpp
cl /EHsc /std:c++20 C:\Users\Administrator\CLionProjects\untitled\main.cpp
cl.exe /std:c++20 C:\Users\Administrator\CLionProjects\untitled\main.cpp

cpp包管理轮子不少,但是没有一个通用的标准,目前主流CMake

https://www.kitware.com/

CMake只是构建工具,并不是包管理工具

CMake 是一个强大的跨平台构建系统工具,用于管理和自动化软件项目的构建过程。以下将介绍 CMake 的基本使用和进阶技巧。

推荐方案

CMake 负责 构建,生成 Makefile/MSBuild/Ninja
vcpkg 负责 包管理,自动下载 C++ 依赖项。

https://www.jetbrains.com/help/clion/2025.1/configuring-file-size-limit.html#file-length-limit

https://www.jetbrains.com/help/clion/2025.1/package-management.html#switch-manifest

配置MSVC自带的CMake,CLion2025默认是CMake + Ninja

C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin

cmake -version
cmake -help

CMake教程

doskey /history
cd C:\Users\zxwang\Desktop\CMake\cmake-3.24.4-tutorial-source\Step1
mkdir build && cd build
cmake ..
cmake --build .

std::cout << "__cplusplus" << __cplusplus << std::endl;

cd Debug
Tutorial.exe 100

不同 C++ 标准版本下 __cplusplus 的值如下:

C++ 标准版本 __cplusplus
C++98 / C++03 199711L
C++11 201103L
C++14 201402L
C++17 201703L
C++20 202002L
C++23 202302L

有些编译器(如 MSVC)默认不会正确设置 __cplusplus,需要开启特定选项(如 /Zc:__cplusplus)才能获取正确的值。

如何检查 C++ 版本

可以使用 #if 预处理指令判断当前编译的 C++ 标准:

#include <iostream>

int main() {
    std::cout << "__cplusplus: " << __cplusplus << std::endl;
#if __cplusplus >= 202302L
    std::cout << "C++23 or later" << std::endl;
#elif __cplusplus >= 202002L
    std::cout << "C++20" << std::endl;
#elif __cplusplus >= 201703L
    std::cout << "C++17" << std::endl;
#elif __cplusplus >= 201402L
    std::cout << "C++14" << std::endl;
#elif __cplusplus >= 201103L
    std::cout << "C++11" << std::endl;
#else
    std::cout << "Pre-C++11" << std::endl;
#endif
    return 0;
}

MSVC(Microsoft Visual Studio)的特殊情况

MSVC(Microsoft Visual C++)在默认情况下不会正确设置 __cplusplus,它通常固定为 199711L,即使使用了较新的 C++ 标准。

在 MSVC 中启用 __cplusplus 的正确值:

  1. cl.exe命令行中添加 /Zc:__cplusplus选项:

    cl /Zc:__cplusplus test.cpp
    
  2. 如果使用 CMake,在 CMakeLists.txt 添加:

    add_compile_options(/Zc:__cplusplus)
    

在 CLion 中修改 CMake 配置

  • 删除 cmake-build-debug 文件夹

  • 配置 CMake 环境变量

    • C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin

    • Terminal: cmake -G "Visual Studio 17 2022" -A x64

  • CMakeLists.txt

    cmake_minimum_required(VERSION 3.24)
    project(untitled)
    
    set(CMAKE_CXX_STANDARD 11)
    
    add_compile_options(/Zc:__cplusplus)
    add_executable(untitled main.cpp)
    
    message(STATUS "C++ Standard: ${CMAKE_CXX_STANDARD}")
    
  • 在 CLion 设置中修改

    • File | Settings | Build, Execution, Deployment | CMake

    • CMake -> CMake options

      -G "Visual Studio 17 2022" -A x64
      
  • 重新加载 CMake

    • File -> Reload CMake Project

CLion 2025.1 最低设置C++20版本 __cplusplus: 202002L

Vcpkg

https://learn.microsoft.com/zh-cn/vcpkg/

Path:

  • C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\Current\Bin

安装vcpkg-2022.08.15.zip

"C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe" -prerelease -legacy -products * -format xml

MSBuild.exe -version

rmdir /S /Q "C:\Program Files\Vcpkg"

move "Vcpkg" "C:\Program Files\Vcpkg"

cd C:\Program Files\Vcpkg

bootstrap-vcpkg.bat

CMake 中安装 OpenCV 4.5.0

  • opencv-4.5.0-vc14_vc15.exe

  • Path: C:\Program Files\OpenCV\build\x64\vc15\bin

  • CMakeLists.txt

    cmake_minimum_required(VERSION 3.24)
    project(untitled)
    
    set(CMAKE_CXX_STANDARD 11)
    
    include_directories("C:/Program Files/OpenCV/build/include")
    include_directories("C:/Program Files/OpenCV/build/include/opencv2")
    
    link_directories("C:/Program Files/OpenCV/build/x64/vc15/lib")
    
    add_compile_options(/Zc:__cplusplus)
    add_executable(untitled main.cpp)
    
    target_link_libraries(untitled opencv_world450d.lib)
    
    message(STATUS "C++ Standard: ${CMAKE_CXX_STANDARD}")
    
  • main.cpp

    #include <iostream>
    #include <opencv2/opencv.hpp>
    
    int main() {
        std::cout << "OpenCV Version: " << CV_VERSION << std::endl;
    
        cv::Mat src = cv::imread("C:/Users/Administrator/CLionProjects/untitled/opencv-logo-white.png");
        cv::imshow("src", src);
        cv::waitKey(0);
        cv::destroyAllWindows();
    
        return 0;
    }
    
posted @ 2020-08-28 14:47  hellsino  阅读(12054)  评论(0)    收藏  举报