簡而言之
CMakeLists.txt 就能產生 Ninja/makefiletarget_*),CMake 會幫你轉換成各平台正確參數MSVC、APPLE、UNIX、CMAKE_SYSTEM_NAME 等條件分支,必要時才做平台特例關鍵語法: project、add_executable、add_library、target_include_directories、target_link_libraries、add_compile_options、target_compile_definitions、target_compile_features、target_link_options、install
關鍵語法:target_sources(FILE_SET HEADERS ...)、add_custom_command(OUTPUT ...)、add_custom_target、add_dependencies
關鍵語法:include(CheckCXXCompilerFlag)、check_cxx_compiler_flag、try_compile、set(CMAKE_*_COMPILER ...)、CMAKE_SYSROOT、CMAKE_FIND_ROOT_PATH*
關鍵語法:find_package、include(FetchContent)、FetchContent_Declare、FetchContent_MakeAvailable、find_package(PkgConfig)、pkg_check_modules
# compile_commands.json:clangd/clang-tidy
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
add_library(core STATIC src/core.cpp)
target_include_directories(core PUBLIC ${CMAKE_SOURCE_DIR}/include)
add_executable(app src/main.cpp)
target_link_libraries(app PRIVATE core)
# 測試
include(CTest)
enable_testing()
add_executable(core_test tests/core_test.cpp)
target_link_libraries(core_test PRIVATE core)
add_test(NAME core_add_test COMMAND core_test)
關鍵語法:set(CMAKE_EXPORT_COMPILE_COMMANDS ON)、include(CTest)、enable_testing、add_test
關鍵語法:add_subdirectory、target_include_directories(PUBLIC/PRIVATE/INTERFACE)、target_link_libraries(PUBLIC/...)、target_compile_definitions、target_compile_features
關鍵語法:install(TARGETS ...)、install(DIRECTORY ...)、include(CPack)、set(CPACK_*)
關鍵內建:CMakePresets.json(不是指令,但 CMake 原生支援)
關鍵語法: option、find_package(OpenMP)、target_link_libraries(Imported targets)