cmake_minimum_required
cmake_minimum_required (VERSION <min>[...<policy_max>] [FATAL_ERROR])
cmake_minimum_required (VERSION 3.16 .3 )
cmake_minimum_required (VERSION 3.16 .3 ...3.20 .0 )
cmake_minimum_required (VERSION 3.16 .3 "cmake version error" )
project
project (<PROJECT -NAME>
[VERSION <major>[.<minor>[.<patch>[.<tweak>]]]]
[DESCRIPTION <project -description-string >]
[HOMEPAGE_URL <url-string >]
[LANGUAGES <language-name>...])
PROJECT_NAME
PROJECT_VERSION, <PROJECT -NAME>_VERSION
PROJECT_VERSION_MAJOR, <PROJECT -NAME>_VERSION_MAJOR
PROJECT_VERSION_MINOR, <PROJECT -NAME>_VERSION_MINOR
PROJECT_VERSION_PATCH, <PROJECT -NAME>_VERSION_PATCH
PROJECT_VERSION_TWEAK, <PROJECT -NAME>_VERSION_TWEAK
CMAKE_CXX_STANDARD
set (CMAKE_CXX_STANDARD 11 )
set_property (TARGET tgt PROPERTY CXX_STANDARD 11 )
include
include (<file |module> [OPTIONAL] [RESULT_VARIABLE <var>]
[NO_POLICY_SCOPE])
include (CheckTypeSize)
check_type_size("long" CMAKE_SIZEOF_LONG)
find_package
find_package (<PackageName> [version] [EXACT] [QUIET] [MODULE]
[REQUIRED] [[COMPONENTS] [components...]]
[OPTIONAL_COMPONENTS components...]
[NO_POLICY_SCOPE])
find_package (Qt6 REQUIRED COMPONENTS Widgets)
Module mode
CMAKE_MODULE_PATH
find_package (Qt5 REQUIRED COMPONENTS Widgets)
Config mode
Qt6Config.cmake
CMAKE_PREFIX_PATH
CMAKE_FRAMEWORK_PATH
CMAKE_APPBUNDLE_PATH
PATH
CMAKE_SYSTEM_PREFIX_PATH
CMAKE_SYSTEM_FRAMEWORK_PATH
CMAKE_SYSTEM_APPBUNDLE_PATH
add_executable
add_executable (<name> [WIN32] [MACOSX_BUNDLE]
[EXCLUDE_FROM_ALL]
[source1] [source2 ...])
add_executable (<name> ALIAS <target >)
add_library
add_library (<name> [STATIC | SHARED | MODULE]
[EXCLUDE_FROM_ALL]
[<source>...])
add_library (<name> INTERFACE [<source>...] [EXCLUDE_FROM_ALL])
add_library (<name> ALIAS <target >)
target_compile_definitions
target_compile_definitions (<target >
<INTERFACE|PUBLIC|PRIVATE> [items1...]
[<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])
target_compile_definitions (foo PUBLIC FOO)
target_compile_definitions (foo PUBLIC -DFOO)
target_compile_definitions (foo PUBLIC "" FOO)
target_compile_definitions (foo PUBLIC -D FOO)
target_compile_options
target_compile_options (<target > [BEFORE]
<INTERFACE|PUBLIC|PRIVATE> [items1...]
[<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC" )
target_compile_options (app PUBLIC /W4 /WX)
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" )
target_compile_options (app PUBLIC -Wall -Werror)
elseif ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" )
target_compile_options (app PUBLIC -Wall -Werror)
endif ()
target_compile_options (app PUBLIC -Wall -Werror)
get_target_property (APP_COMPLIE_OPTIONS app COMPILE_OPTIONS)
message (STATUS "complie option ${APP_COMPLIE_OPTIONS}" )
target_include_directories
target_include_directories (<target > [SYSTEM] [AFTER|BEFORE]
<INTERFACE|PUBLIC|PRIVATE> [items1...]
[<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])
target_link_libraries
target_link_libraries (<target > ... <item>... ...)
target_link_libraries (<target >
<PRIVATE|PUBLIC|INTERFACE> <item>...
[<PRIVATE|PUBLIC|INTERFACE> <item>...]...)
target_link_options
target_link_options (<target > [BEFORE]
<INTERFACE|PUBLIC|PRIVATE> [items1...]
[<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])
target_link_options (app PUBLIC -pthread)
install
install (TARGETS <target >... [...])
install (IMPORTED_RUNTIME_ARTIFACTS <target >... [...])
install ({FILES | PROGRAMS} <file >... [...])
install (DIRECTORY <dir>... [...])
install (SCRIPT <file > [...])
install (CODE <code> [...])
install (EXPORT <export -name> [...])
install (RUNTIME_DEPENDENCY_SET <set -name> [...])
install (TARGETS app DESTINATION bin)
cmake -DCMAKE_INSTALL_PREFIX=/home/noexcept/testinstall ..
cmake ..
cmake --install . --prefix "/home/noexcept/testinstall"
make install
testing
enable_testing ()
add_test (NAME <name> COMMAND <command > [<arg>...]
[CONFIGURATIONS <config>...]
[WORKING_DIRECTORY <dir>]
[COMMAND_EXPAND_LISTS])
enable_testing ()
add_test (NAME test1 COMMAND app)
set_tests_properties (test1 PROPERTIES PASS_REGULAR_EXPRESSION "no_test_def" )
cmake ..
make test
cpack
set (CPACK_PACKAGE_NAME "app" )
set (CPACK_INSTALL_PREFIX "/home/noexcept/testcpack" )
set (CPACK_PACKAGE_VERSION "0.0.1" )
include (CPack)
cpack
file
读取文件
file (READ <filename> <variable>
[OFFSET <offset>] [LIMIT <max-in>] [HEX])
file (STRINGS <filename> <variable> [<options>...])
file (READ readme.md README_CONTENT)
message (STATUS ${README_CONTENT} )
写入文件
file (WRITE <filename> <content>...)
file (APPEND <filename> <content>...)
file (TOUCH [<files>...])
file (TOUCH_NOCREATE [<files>...])
file (GENERATE OUTPUT output-file
<INPUT input-file |CONTENT content>
[CONDITION expression] [TARGET target ]
[NO_SOURCE_PERMISSIONS | USE_SOURCE_PERMISSIONS |
FILE_PERMISSIONS <permissions>...]
[NEWLINE_STYLE [UNIX|DOS|WIN32|LF|CRLF] ])
file (GENERATE OUTPUT gen_file.md CONTENT "i my a gen_file" )
HASH文件
file (<HASH> <filename> <variable>)
file (MD5 ${CMAKE_SOURCE_DIR} /readme.md README_HASH_MD5)
message (STATUS "readme.md-md5:" ${README_HASH_MD5} )
file (SHA256 ${CMAKE_SOURCE_DIR} /readme.md README_HASH_SHA256)
message (STATUS "readme.md-sha256" ${README_HASH_SHA256} )
文件目录
file (GLOB <variable>
[LIST_DIRECTORIES true |false ] [RELATIVE <path>] [CONFIGURE_DEPENDS]
[<globbing-expressions>...])
file (GLOB_RECURSE <variable> [FOLLOW_SYMLINKS]
[LIST_DIRECTORIES true |false ] [RELATIVE <path>] [CONFIGURE_DEPENDS]
[<globbing-expressions>...])
file (GLOB PNG_FILES *.png)
file (MAKE_DIRECTORY [<directories>...])
file (MAKE_DIRECTORY dir1 dir2 dir3)
file (REMOVE [<files>...])
file (REMOVE_RECURSE [<files>...])
file (RENAME <oldname> <newname>
[RESULT <result>]
[NO_REPLACE])
file (COPY_FILE <oldname> <newname>
[RESULT <result>]
[ONLY_IF_DIFFERENT])
file (<COPY|INSTALL > <files>... DESTINATION <dir>
[NO_SOURCE_PERMISSIONS | USE_SOURCE_PERMISSIONS]
[FILE_PERMISSIONS <permissions>...]
[DIRECTORY_PERMISSIONS <permissions>...]
[FOLLOW_SYMLINK_CHAIN]
[FILES_MATCHING]
[[PATTERN <pattern> | REGEX <regex>]
[EXCLUDE] [PERMISSIONS <permissions>...]] [...])
file (SIZE <filename> <variable>)
file (SIZE ${CMAKE_SOURCE_DIR} /readme.md README_SIZE)
上传下载
file (DOWNLOAD <url> [<file >] [<options>...])
file (UPLOAD <file > <url> [<options>...])
string
enable_testing
enable_testing ()
add_test
add_test (<name> <command > [<arg>...])
add_test (AllTestsInMain tests)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现