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
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
的正确值:
-
在
cl.exe
命令行中添加/Zc:__cplusplus
选项:cl /Zc:__cplusplus test.cpp
-
如果使用 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; }