CMakeLists.txt的编写

0.cmake与CMakeLists.txt

1.CMakeLists.txt的核心关键点

  • 配置项目

    1
    cmake -S . -B build
  • 构建项目

    1
    cmake --build build
  • -T参数

    1
    cmake -T host=x64
  • -A参数

    1
    cmake -A x64

1.1 声明cmake的最低版本

1
cmake_minimum_required( VERSION 2.8 )

1.2 声明一个cmake工程

1
PROJECT(myproject)

1.3 生成二进制可执行文件

1
add_executable(可执行文件名 空格 由哪些文件生成该可执行文件)

1.4 生成二进制库文件(动态库 or 静态库)

1
2
add_library(库文件名字 空格 STATIC 空格 由哪些文件生成该可执行文件)
add_library(库文件名字 空格 SHARED 空格 由哪些文件生成该可执行文件)

1.5 添加第三方头文件

1
target_include_directories(谁要找头文件  去哪里找)

1.6 链接第三方库文件

1
target_link_libraries(谁要链接 要链接谁)
  • 如果源文件(例如CPP)中包含第三方头文件,但是头文件(例如hpp)中不包含该第三方文件头,采用PRIVATE

  • 如果头文件中包含该第三方文件头,但是源文件(例如CPP)中不包含,采用 INTERFACE

  • 如果源文件和头文件中都包含该第三方文件头,采用PUBLIC

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
40
41
42
43
44
cmake_minimum_required(VERSION 2.7)

project(Blackhole)

findpackge(imgui REQUIRED)
findpackge(glfw3 REQIURED)
findpackge(GLEW REQUIRED)
findpackge(glm REQUIRED)

file(GLOB SRC_FILES
"${PROJECT_SOURCE_DIR}/src/*.h"
"${PROJECT_SOURCE_DIR}/src/*.cpp"
"${PROJECT_SOURCE_DIR}/src/*.c"
"${PROJECT_SOURCE_DIR}/src/*.cc"
)

add_executable(${CMAKE_PROJECT_NAME} ${SRC_FILES})

target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE imgui::imgui)
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE glfw)
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE GLEW::GLEW)
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE glm)

target_compile_features(${CMAKE_PROJECT_NAME} PRIVATE cxx_std_17)

#copy assets files after build
#拷贝项目根目录/assets =====> 项目根目录/build/Debug/assets
add_custom_command(
TARGET ${CMAKE_PROJECT_NAME}
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
"${PROJECT_SOURCE_DIR}/assets"
"$<TARGET_FILE_DIR:${CMAKE_PROJECT_NAME}>/assets"
)

#拷贝项目根目录/shader =====> 项目根目录/build/Debug/shader
add_custom_command(
TARGET ${CMAKE_PROJECT_NAME}
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
"${PROJECT_SOURCE_DIR}/shader"
"$<TARGET_FILE_DIR:${CMAKE_PROJECT_NAME}>/shader"
)

文章作者: 小王同学
文章链接: https://morvan.top/2021/11/09/CMakeLists-txt的编写/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 小王同学的精神驿站