基本语法
- 变量使用${}方式取值
- 指令(参数 1 参数 2…) 参数使用括弧括起,参数之间使用空格或分号分开
- 指令是大小写无关的,参数和变量是大小写相关的
指令
- PROJECT(projectname [CXX] [C] [Java])
- SET(VAR [VALUE] [CACHE TYPE DOCSTRING [FORCE]]) 显式的定义变量
- MESSAGE([SEND_ERROR | STATUS | FATAL_ERROR] “message to display”
…) - ADD_EXECUTABLE(name ${SRC_LIST})
由源文件生成一个可执行文件 - ADD_SUBDIRECTORY(source_dir [binary_dir] [EXCLUDE_FROM_ALL])这个指令用于向当前工程添加存放源文件的子目录
- 目标文件的安装:
INSTALL(TARGETS targets…[[ARCHIVE|LIBRARY|RUNTIME][DESTINATION dir][PERMISSIONS permissions…][CONFIGURATIONS[Debug|Release|…]]
[COMPONENT ][OPTIONAL]] […])
targets
ADD_EXECUTABLE 或者 ADD_LIBRARY 定义的目标文件,可能是可执行二进制、动态库、静态库
ARCHIVE LIBRARY RUNTIME
ARCHIVE 特指静态库,LIBRARY 特指动态库,RUNTIME特指可执行目标二进制
DESTINATION
定义了安装的路径,如果路径以/开头,那么指的是绝对路径,这时候
CMAKE_INSTALL_PREFIX 其实就无效了。如果你希望使用 CMAKE_INSTALL_PREFIX 来
定义安装路径,就要写成相对路径,即不要以/开头,那么安装后的路径就是
${CMAKE_INSTALL_PREFIX}/<DESTINATION 定义的路径>
example:
INSTALL(TARGETS myrun mylib mystaticlib
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION libstatic
)
变量
project指令隐式的定义了两个 cmake 变量:
- PROJECT_BINARY_DIR
- PROJECT_SOURCE_DIR
- EXECUTABLE_OUTPUT_PATH
- LIBRARY_OUTPUT_PATH
在哪里 ADD_EXECUTABLE 或 ADD_LIBRARY,如果需要改变目标存放路径,就在哪里设置EXECUTABLE_OUTPUT_PATH和LIBRARY_OUTPUT_PATH - CMAKE_INSTALL_PREFIX
常见的使用方法看起来是这个样子:
cmake -D CMAKE_INSTALL_PREFIX=/usr .