阶段 2.3:CMake 高级(条件编译 + 安装 + 跨平台)
学习目标
- 掌握条件编译:
if/else - 学会安装指令:
install - 处理跨平台差异(Linux/Windows)
核心知识点
- 条件编译:
if(CMAKE_BUILD_TYPE STREQUAL "Debug")(判断构建类型) - 安装指令:install(TARGETS main DESTINATION bin):安装可执行文件到/usr/local/bininstall(TARGETS calc DESTINATION lib):安装库到/usr/local/libinstall(FILES calc.h DESTINATION include):安装头文件到/usr/local/include
- 跨平台判断:
if(WIN32)、if(UNIX)、if(APPLE)
实战练习
练习 4:Debug/Release 模式 + 安装功能
步骤 1:修改CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(Calc)
include_directories(./)
# 设置构建类型(默认Release)
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release)
endif()
# Debug模式:添加-g -O0
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
add_compile_options(-g -O0)
else()
add_compile_options(-O2)
endif()
add_library(calc add.c sub.c)
add_executable(main main.c)
target_link_libraries(main calc)
# 安装指令
install(TARGETS main DESTINATION bin)
install(TARGETS calc DESTINATION lib)
install(FILES calc.h DESTINATION include)
步骤 2:构建与安装
mkdir build && cd build
# 调试模式
cmake -DCMAKE_BUILD_TYPE=Debug ..
make
# 安装(需要sudo权限,安装到/usr/local/{bin,lib,include})
sudo make install
练习 5:跨平台配置(Linux/Windows)
添加跨平台判断到CMakeLists.txt:
cmake_minimum_required(VERSION 3.10)
project(Calc)
include_directories(./)
# 跨平台判断
if(WIN32)
add_compile_definitions(WINDOWS) # 定义宏WINDOWS
message(STATUS "Building on Windows")
elseif(UNIX)
add_compile_definitions(LINUX) # 定义宏LINUX
message(STATUS "Building on Linux")
elseif(APPLE)
add_compile_definitions(MACOS) # 定义宏MACOS
message(STATUS "Building on macOS")
endif()
add_library(calc add.c sub.c)
add_executable(main main.c)
target_link_libraries(main calc)
验证:在 Linux 下执行cmake ..,会输出Building on Linux;在 Windows 下用 VS 打开,会输出Building on Windows。
构建工具学习 文章被收录于专栏
make cmake
字节跳动公司福利 1347人发布