CMake教程(三)——配置完善
接下来我以一个例子来解释常用的配置项。
cmake_minimum_required(VERSION 3.10)
set (CMAKE_CXX_COMPILER clang) # 指定C编译器
set (CMAKE_CXX_COMPILER clang++) # 指定C++编译器
set (CMAKE_C_STANDARD 99) # 指定C标准
set (CMAKE_CXX_STANDARD 14) # 指定C++标准
set(CMAKE_DEBUG_POSTFIX "_d") # 以_d作为Debug程序的后缀
# set(CMAKE_RELEASE_POSTFIX "_r") # 以_r作为Release程序的后缀
set (CMAKE_ENABLE_EXPORTS TRUE) # 允许编译器添加选项
project(hello LANGUAGES C CXX) # 选择项目类型
add_executable(${PROJECT_NAME} main.cpp)
set_target_properties(${PROJECT_NAME} PROPERTIES
DEBUG_POSTFIX ${CMAKE_DEBUG_POSTFIX}) # 以_d来后缀Debug的lib文件夹
# set_target_properties(${PROJECT_NAME} PROPERTIES
# RELEASE_POSTFIX ${CMAKE_RELEASE_POSTFIX}) # 以_r来后缀Release的lib文件夹
set( CMAKE_EXPORT_COMPILE_COMMANDS ON ) # 生成数据库文件,如果你使用Vim或Emacs,这是必不可少的。
如果不配置,默认使用的是Release构建模式
常规的构建,其实有更简单的方法
cmake -S . -B build
cmake --build build
对于Debug和Release构建,你只需要
# 构建Debug在项目根目录中的debug文件夹
cmake -S . -B debug -D CMAKE_BUILD_TYPE=Debug
cmake --build debug
# 构建Release在项目根目录中的release文件夹
cmake -S . -B release -D CMAKE_BUILD_TYPE=Release
cmake --build release
如果你想使用Ninja构建,你可以简单地添加-G选项,如:
# 用Ninja构建Release
cmake -S . -B release -D CMAKE_BUILD_TYPE=Release -G Ninja
cmake --build release
如果你使用Vim或emacs,可能需要将数据库文件链接到项目根目录,实现代码补全。
# (常用)构建生成数据库文件后,链接到项目根目录
ln debug/compile_commands.json compile_commands.json
# 同样,但是一般生成release的时候已经准备打包了,一般不需要。
ln release/compile_commands.json compile_commands.json
链接有一个好处,当你引入其他第三方库时,不需要重复复制到项目根目录,节约时间。
参考链接:
- https://riptutorial.com/cmake/example/25142/c-cplusplus-version-selection
- https://cmake.org/cmake/help/latest/manual/cmake-toolchains.7.html
- https://zhuanlan.zhihu.com/p/116953293
- https://cmake.org/cmake/help/latest/guide/tutorial/Packaging Debug and Release.html
- https://stackoverflow.com/questions/7724569/debug-vs-release-in-cmake