cmake理解
cmake
统一的跨平台的构架工具,用于生成makefile(makefile用于生成二进制文件)
核心理念
Targets represent executables, libraries, and utilities built by CMake. Every
add_library,add_executable, andadd_custom_targetcommand 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理解]]