如何在Windows系统下使用CMake编译C++代码

CMake是一款跨平台的开源构建工具,可以用于自动生成各种平台的makefile、VS项目以及Xcode项目等,能够方便地管理、构建和测试C++代码。

下面将介绍如何在Windows系统下使用CMake编译C++代码,并且通过实例演示其应用场景。

准备工作

在开始使用CMake之前,需要安装以下软件:

编写CMakeLists.txt文件

在工程目录下新建CMakeLists.txt文件,该文件是CMake的配置文件,用于描述所需的库文件、头文件、源文件以及链接库等信息。

例如,在某个工程的源码目录中,有以下4个源文件:hello.cpp、greet.cpp、main.cpp和CMakeLists.txt。其中,hello.cpp和greet.cpp都是库文件,main.cpp是可执行文件的入口。CMakeLists.txt文件如下所示:

Copy Code
# CMake 最低版本号要求 cmake_minimum_required (VERSION 3.5) # 项目信息 project (Demo) # 加入一个配置文件用于处理 CMake 对源码的设置 configure_file ( "${PROJECT_SOURCE_DIR}/config.h.in" "${PROJECT_BINARY_DIR}/config.h" ) # 是否使用自己的 MathFunctions 库 option (USE_MYMATH "Use provided math implementation" ON) # 是否加入 MathFunctions 库 if (USE_MYMATH) include_directories ("${PROJECT_SOURCE_DIR}/mymath") add_subdirectory (mymath) set (EXTRA_LIBS ${EXTRA_LIBS} MathFunctions) endif (USE_MYMATH) # 查找当前目录下的所有源文件 # 并将名称保存到 DIR_SRCS 变量 aux_source_directory (. DIR_SRCS) # 指定生成目标 add_executable (Demo ${DIR_SRCS}) # 添加链接库 target_link_libraries (Demo ${EXTRA_LIBS})

编译项目

在CMakeLists.txt所在目录下新建build文件夹,并进入该目录,执行以下命令:

Copy Code
cmake ..

该命令会自动生成Visual Studio的工程文件。接着,执行以下命令:

Copy Code
cmake --build . --config Release

该命令会在Release模式下编译代码,并生成可执行文件。

应用场景

CMake的应用非常广泛,例如可以用于:

  • 构建不同平台上的项目:CMake可以帮助我们自动生成各种平台的makefile、VS项目以及Xcode项目等,从而方便地构建和管理C++代码。
  • 管理第三方库:通过CMakeLists.txt文件,可以自动下载、编译和链接第三方库,避免了手动复制、粘贴代码的麻烦。
  • 统一管理各平台下的工程文件:通过CMake的跨平台性,可以简化工程文件的管理,让开发人员更加关注代码的实现细节。

示例

假设我们要在Windows系统下编译并运行一个简单的C++应用程序,该程序调用了OpenCV图像处理库。我们需要先安装OpenCV,并配置好环境变量。

然后,在工程目录下新建CMakeLists.txt文件,内容如下所示:

Copy Code
cmake_minimum_required(VERSION 3.5) project(opencv_test) # 设置 C++ 编译器为 clang 或 gcc # 如果使用 Visual Studio,可以将这段代码注释掉 set(CMAKE_C_COMPILER "/usr/bin/clang") set(CMAKE_CXX_COMPILER "/usr/bin/clang++") # 添加 OpenCV 库 find_package( OpenCV REQUIRED ) # 添加编译选项 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -O2") # 添加可执行文件目标 add_executable(opencv_test opencv_test.cpp) # 链接 OpenCV 库 target_link_libraries(opencv_test ${OpenCV_LIBS})

其中,CMake会自动查找OpenCV库,并且链接到最终的可执行文件中。

最后,在命令行中进入工程目录下的build文件夹,执行以下命令:

Copy Code
cmake .. cmake --build . --config Release ./opencv_test.exe

即可在Windows系统下编译、链接并运行该程序。