CMake是一个跨平台的自动化构建系统,广泛用于C/C++项目的构建管理。以下是在Linux环境下使用CMake构建应用程序的关键配置技巧:
cmake_minimum_required(VERSION 3.10)
project(MyApp LANGUAGES CXX)
add_executable(myapp main.cpp)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
# 主项目CMakeLists.txt
add_subdirectory(src)
add_subdirectory(tests)
# src/CMakeLists.txt
add_library(mylib STATIC libfile1.cpp libfile2.cpp)
target_include_directories(mylib PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
# 主程序
add_executable(myapp main.cpp)
target_link_libraries(myapp PRIVATE mylib)
find_package(OpenSSL REQUIRED)
find_package(Boost 1.65.0 COMPONENTS filesystem system REQUIRED)
target_link_libraries(myapp
PRIVATE
OpenSSL::SSL
Boost::filesystem
Boost::system
)
option(BUILD_TESTS "Build test programs" ON)
option(USE_FEATURE_X "Enable experimental feature X" OFF)
if(USE_FEATURE_X)
target_compile_definitions(myapp PRIVATE USE_FEATURE_X=1)
endif()
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
target_compile_options(myapp PRIVATE -Wall -Wextra -Wpedantic)
endif()
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ..
生成compile_commands.json
文件,可用于静态分析工具如clang-tidy。
install(TARGETS myapp
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
)
install(DIRECTORY include/ DESTINATION include)
sudo apt install ccache
export CC="ccache gcc"
export CXX="ccache g++"
cmake ..
# 创建不同构建类型目录
mkdir -p build/{debug,release}
# Debug构建
cd build/debug
cmake -DCMAKE_BUILD_TYPE=Debug ../..
# Release构建
cd build/release
cmake -DCMAKE_BUILD_TYPE=Release ../..
sudo apt install ninja-build
cmake -G Ninja ..
ninja
message(STATUS "Boost include dir: ${Boost_INCLUDE_DIRS}")
cmake --debug-output ..
include(CMakePrintHelpers)
cmake_print_variables(CMAKE_CXX_FLAGS)
target_*
命令而非全局命令PRIVATE
、PUBLIC
和INTERFACE
正确指定依赖关系CMAKE_CXX_FLAGS
等全局变量find_package
的现代模式(Config模式)通过掌握这些技巧,您可以创建高效、可维护的CMake构建系统,适用于各种规模的Linux应用程序项目。