基本规则
- 主目录和存放源代码子目录下都要有CMakeLists.txt
- 变量使用
${}
取值(if中使用变量名),环境变量使用$ENV{}
取值,使用SET(ENV{VAR} VALUE)
赋值 - 指令格式:指令(参数1 参数2…)
环境变量
- PROJECT_BINARY_DIR和PROJECT_SOURCE_DIR变量
- CMAKE_BUILE_TYPE
- CMAKE_MODULE_PATH
- EXECUTABLE_OUTPUT_PATH和LIBRARY_OUTPUT_PATH
例子:SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
常用指令
set
给变量赋值message
查看变量具体内容
例子:message(STATUS “The CMAKE_VERSION is ${CMAKE_VERSION}”)
-
project(projectname [cxx] [c] [java])
指定项目名称 -
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
incluede文件夹 -
add_dependencies(${TARGET_NAME} deploy)
deploy代表你项目依赖的项目,保证deploy目标在其他的目标之前被构建 -
target_link_libraries(${TARGET_NAME}
指定项目依赖的lib文件 -
ADD_SUBDIRECTORY(source_dir [binary_dir] [EXCLUDE_FROM_ALL])
指令用于向当前工程添加存放源文件的子目录
ADD_EXECUTABLE
告诉工程生成一个可执行文件。
ADD_LIBRARY(libname [SHARED|STATIC]
告诉工程生成一个库文件
进阶指令
FIND_LIBRARY命令
查找库所在目录,语法如下:
find_library (
<VAR>
name | NAMES name1 [name2 ...] [NAMES_PER_DIR]
[HINTS path1 [path2 ... ENV var]]
[PATHS path1 [path2 ... ENV var]]
[PATH_SUFFIXES suffix1 [suffix2 ...]]
[DOC "cache documentation string"]
[NO_DEFAULT_PATH]
[NO_CMAKE_ENVIRONMENT_PATH]
[NO_CMAKE_PATH]
[NO_SYSTEM_ENVIRONMENT_PATH]
[NO_CMAKE_SYSTEM_PATH]
[CMAKE_FIND_ROOT_PATH_BOTH |
ONLY_CMAKE_FIND_ROOT_PATH |
NO_CMAKE_FIND_ROOT_PATH]
)
举例:FIND_LIBRARY(RUNTIME_LIB rt /usr/lib /usr/local/lib NO_DEFAULT_PATH)
cmake会在目录中查找,如果所有目录中都没有,值RUNTIME_LIB就会被赋为NO_DEFAULT_PATH
web
https://blog.youkuaiyun.com/zhanghm1995/article/details/80902807