文章

1`构建工具_Cmake

CMake

CMake 是一个 跨平台的构建工具,可以根据不同的平台、不同的编译器,生成相应的构建文件

1

源文件想要在各个平台各个编译器运行:

  • 考虑没有cmake的情况:需要考虑低级构建脚本的差异
  • 考虑用cmake的情况:通过高层抽象cmake,将它编译成特定平台的低级构建脚本(Makefile 、.vcxproj、bat、.sh)

CmakeLists.txt配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
cmake_minimum_required(VERSION 3.10)//指定最低CMake版本
project(MyProject) //项目名称
set(CMAKE_CXX_STANDARD 17) //C++标准:11, 14, 17, 20, 23
set(CMAKE_BUILD_TYPE Debug) //编译类型(Debug/Release)
find_package(OpenGL REQUIRED)//查找包
//源文件
set(SOURCES
    src/main.cpp
    src/utils.cpp
    src/glfw_window.cpp
)
file(GLOB SOURCES "src/*.cpp")
file(GLOB_RECURSE SOURCES "src/*.cpp")//递归查找
//包含目录
include_directories(
    include/
    third_party/glfw/include
)
//构建目标
add_executable(my_app ${SOURCES})//可执行文件
add_library(my_lib STATIC ${SOURCES})//静态库
add_library(my_lib SHARED ${SOURCES})//动态库
//链接库
target_link_libraries(my_app
    OpenGL::GL
    Threads::Threads
)
//条件编译
if(WIN32)
    target_link_libraries(my_app ws2_32)
elseif(UNIX AND NOT APPLE)
    target_link_libraries(my_app dl)
endif()
//安装目标
install(TARGETS my_app
    RUNTIME DESTINATION bin
    LIBRARY DESTINATION lib
    ARCHIVE DESTINATION lib
)

展开

生成工程、构建运行

  • 生成工程
    • 命令行方式

      1
      2
      3
      
      mkdir build//创建文件夹build
      cd build//进入文件夹
      cmake .. -G "Visual Studio 17 2022" -A x64 // -G指定编译器(可选。否则使用默认编译器),指定CmakeLists.txt所在目录
      

      展开

      • 构建工程文件
    • GUI方式

      • 选择源码目录
      • 选择输出目录
      • 点击Configure,选择要构建的目标,等待配置,done……,生成Makefile
      • 点击Generate,done……,生成工程文件
1
2
cmake --build .//构建项目
Main.exe//运行可执行文件

展开

  • 命令行编译运行
  • 调试:自动生成pdb
  • 多文件:在CmakeLists.txt中,可以使用file(GLOB_RECURSE SOURCES “src/*.cpp”)多源文件编译操作
  • 使用库:
本文由作者按照 CC BY 4.0 进行授权
本页总访问量