cmake入门

命令

生成 Makefile

1
cmake .

编译 Makefile

1
make

CMakeLists.txt 命令解释

设置项目名以及项目语言

1
project(test)

设置 cmake 版本的要求

1
cmake_minimum_required(VERSION 2.8)

打印一些信息到终端

1
message(CMAKE_SOURCE_DIR=${CMAKE_SOURCE_DIR})

设置变量

1
2
3
4
set(CMAKE_BUILD_TYPE Debug)
set(CMAKE_C_COMPILER gcc)
set(CMAKE_C_FLAGS -gdwarf-2 -g -D_LINUX -DGAME_MODULE -m64 -std=c++2a -lstdc++ -lsomelibrary -fPIC)
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/build/)

设置头文件路径

1
2
3
include_directories(${CMAKE_SOURCE_DIR})
include_directories(${CMAKE_SOURCE_DIR}/xxx)
include_directories(${CMAKE_SOURCE_DIR}/xxx/xxx)

指定链接库路径

1
2
3
link_directories(${CMAKE_SOURCE_DIR})
link_directories(${CMAKE_SOURCE_DIR}/xxx)
link_directories(${CMAKE_SOURCE_DIR}/xxx/xxx)

添加源文件

1
aux_source_directory(. dir_root)

链接库

1
link_libraries(MySharedLib)

生成目标文件

1
add_executable(test ${dir_root})

链接 库文件

1
target_link_libraries(test MySharedLib)

示例

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
project(test)
cmake_minimum_required(VERSION 2.8)

message (CMAKE_SOURCE_DIR=${CMAKE_SOURCE_DIR})

set(CMAKE_BUILD_TYPE Debug)
set(CMAKE_C_COMPILER gcc)
set(CMAKE_C_FLAGS -gdwarf-2 -g -D_LINUX -DGAME_MODULE -m64 -std=c++2a -lstdc++ -lsomelibrary -fPIC)
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/build/)

include_directories(${CMAKE_SOURCE_DIR})
include_directories(${CMAKE_SOURCE_DIR}/include/)
include_directories(${CMAKE_SOURCE_DIR}/include/boost)
include_directories(${CMAKE_SOURCE_DIR}/LBase)
include_directories(${CMAKE_SOURCE_DIR}/LFrame)

link_directories(${CMAKE_SOURCE_DIR}/lib/linux)

aux_source_directory(. dir_root)
aux_source_directory(./Game/HandlerRobot dir_game_handler_robot)
aux_source_directory(./Game dir_game)

add_executable(test
${dir_root}
${dir_game_handler_robot}
${dir_game})

target_link_libraries(test lframe lbase -lboost_thread -lboost_system -lpthread)