cmake理解

cmake

统一的跨平台的构架工具,用于生成makefile(makefile用于生成二进制文件)

核心理念

Targets represent executables, libraries, and utilities built by CMake. Every add_libraryadd_executable, and add_custom_target command creates a target.

核心命令

构建可执行文件

add_executable(main main.cpp)

新增模块

add_subdirectory(module)

模块连接

target_link_libraries(main module)

新增模块

add_library(module module.cpp)

头文件搜索模块

target_include_directories()

生成流程

模块独立编译(add_library)

模块连接(target_link_libraries)

可执行文件(add_executable)

常见问题

target_include_directories()和add_subdirectory()区别

target_include_directories() 告诉在这个文件里找头文件 add_subdirectory()则是子项目在哪,会进行编译

# module_a/CMakeLists.txt
add_library(module_a a.cpp)
target_include_directories(module_a PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})

对比示例

project/
├── CMakeLists.txt
├── include/
│   └── utils.h
├── src/
│   └── main.cpp
└── libs/
    └── math/
        ├── CMakeLists.txt
        ├── include/
        │   └── math.h
        └── src/
            └── math.cpp
include可以被多个文件使用对外暴露

作为cpp,暴露头文件,但是在最终的连接阶段,由于定义在cpp文件中,那么这个时候就可以共享头文件

Input

 LIST FROM [[note-cmake理解]]

Reference

知乎 cmake官网