CMake 常用命令速查

本文只是给出一个大概的说明,命令的详细用法以官方的参考手册为准

项目管理

命令 说明
project(name) 指定当前项目的名称,一般是第一句,不用打引号
cmake_minimum_required(VERSION 3.4.1) 指定最低版本
if(UNIX), endif() 判断当前系统是否是 Unix/Linux
if(WIN32), endif() 判断当前系统是否是 Windows
if(str1 STREQUAL str2), else(), endif() 判断字符串是否相等
set(var value) 设置值。如果值比较长,可以直接在引号里面换行,不需要 \n
set(var value CACHE STRING "description") 创建一个变量(选项),默认值为 value(用户可使用 -D 更改其值),可以把 STRING 改成 PATHFILEPATH,在 CMake GUI 中会变成目录选择对话框
option(var description OFF) 添加一个开关选项,描述内容必须要填
message(STATUS|WARNING|FATAL_ERROR msg_text) 输出状态信息,如果输出 FATAL_ERROR 则结束
add_subdirectory(dir) 加载并处理一个子文件夹下的 CMakeLists.txt 文件
include(file_or_module) 加载并处理一个 .cmake 文件
return() 直接从当前 cmake 文件返回
ExternalProject_Add(name URL url DOWNLOAD_DIR down_dir SOURCE_DIR unpack_dir CONFIGURE_COMMAND cmd1 BINARY_DIR build_dir INSTALL_COMMAND cmd2) 从外部下载并构建项目
add_executable(target WIN32 sources) 添加一个可执行文件(WIN32 表示入口点是 WinMain 而不是 main,不影响 Linux)
add_custom_command(...) 添加编译前/后要执行的自定义命令,或者添加一个能生成一些文件的命令。参数较多请看官方文档
add_custom_target(...) 添加新的编译目标,且可以自定义命令,参数较多请看官方文档
add_dependencies(target dep1 dep2) 给一个编译目标(通常是 add_library 等创建的目标)添加依赖
install(TARGETS ${TARGT} RUNTIME DESTINATION dest_dir) 安装命令,把编译后的文件复制到该文件夹下,参数较多请看官方文档

当你使用 ExternalProject_Addadd_custom_commandadd_custom_target 执行自定义命令时,如果传入的命令是一个字符串,通常你需要使用 seperate_arguments(YOUR_OUT_CMD UNIX_COMMAND ${YOUR_COMMAND_STRING}) 来将其切分。

源文件和头文件

命令 说明
include_directories(dir_path...) 指定头文件目录
aux_source_directory(dir_path SOURCES) 把一个目录中的所有文件视为源文件加入到变量中,这里是 SOURCES
configure_file(input_file output_file) 指定一个配置文件(.in 文件)
list(APPEND variable_name value) 给列表加入一个项目,例如单独添加一个源文件
string(CONCAT dst_str str) 字符串拼接
enable_language(ASM) 添加汇编文件支持
add_definitions("-DXX -DXXX=XXX") 增加宏定义
set_source_files_properties(file1 file2 PROPERTIES prop1 value1 prop2 value2) 设置源文件的属性,如 EXTERNAL_OBJECT TRUE GENERATED TRUE 将允许使用现有的 obj 文件进行链接

命令 说明
add_library(name SHARED|STATIC src_file_path...) 添加一个库,多个路径之间不用逗号
add_library(name SHARED|STATIC IMPORTED) 导入一个已经编译好的库
set_target_properties(name PROPERTIES IMPORTED_LOCATION lib_path) 对于导入的库,手动指定它的位置
target_link_libraries(target_name lib_name ...) 给程序链接依赖的静态库或动态库
find_library(variable_name lib_name) 搜索库,并赋给变量
link_directories(lib_path) 指定链接器搜索目录
find_package(name COMPONENTS components REQUIRED) 搜索包(如 wxWidgets),而且是必须找到

尝试静态链接C库,即使使用了 -static 发现仍然不是静态链接的。需要加上

set_target_properties(myexe PROPERTIES
  LINK_SEARCH_START_STATIC ON
  LINK_SEARCH_END_STATIC ON)

变量

变量 说明
CMAKE_PROJECT_NAME 项目名称
CMAKE_CXX_STANDARD C++ 标准,如 11
CMAKE_CXX_STANDARD_REQUIRED 设置 ON
CMAKE_CXX_FLAGS_DEBUG C++ 调试编译时使用的标志
CMAKE_CXX_FLAGS_RELEASE C++ 发行编译时使用的标志
CMAKE_EXE_LINKER_FLAGS 链接时的标志
CMAKE_SHARED_LIBRARY_LINK_C_FLAGS 共享库链接标志
CMAKE_BUILD_TYPE 编译类型,DebugReleaseMinSizeRelRelWithDebInfo 四种
CMAKE_INSTALL_PREFIX 安装目录前缀
CMAKE_MODULE_PATH 模块路径,那里应该有一些 modulename.cmake 文件
TARGETS 目标文件
SOURCES 源文件
PROJECT_LINK_LIBS 链接文件列表
CMAKE_SOURCE_DIR 或 PROJECT_SOURCE_DIR 项目源文件路径(默认就是 CMakeList.txt 所在路径)
CMAKE_BINARY_DIR 或 PROJECT_BINARY_DIR 项目二进制文件路径(默认就是 CMakeList.txt 所在路径)
CMAKE_CURRENT_BINARY_DIR 外部编译时,指的是target目录,内部编译时,指的是顶级目录
CMAKE_CURRENT_SOURCE_DIR CMakeList.txt 所在的目录
CMAKE_CURRENT_LIST_DIR CMakeList.txt 的完整路径
CMAKE_TOOLCHAIN_FILE CMake 将会自动处理这个变量指定的 CMake 文件,其中设置了交叉编译相关的变量
CMAKE_C_COMPILER 指定 C 编译器
CMAKE_CXX_COMPILER 指定 C++ 编译器
CMAKE_LINKER 指定 LD 工具
CMAKE_OBJCOPY 指定 OBJCOPY 工具
CMAKE_OBJDUMP 指定 OBJDUMP 工具
CMAKE_SIZE 指定 SIZE 工具
CMAKE_ASM_COMPILER 指定汇编器
CMAKE_VERBOSE_MAKEFILE 默认为 FALSE,设置为 TRUE 则显示 Makefile 的详细内容,用于调试构建系统

猜你喜欢

转载自blog.csdn.net/kencaber/article/details/105095396
今日推荐