关键字
project
可以⽤来指定⼯程的名字和⽀持的语⾔,默认⽀持所有语⾔。eg.project(HELLO)
,project(HELLO CXX)
set
⽤来显式指定变量,eg.set(SRC_LIST main.cpp)
message
向终端输出用户自定义的信息,主要包含三种信息:- SEND_ERROR,产⽣错误,⽣成过程被跳过
- SATUS,输出前缀为—的信息
- FATAL_ERROR,⽴即终⽌所有 cmake 过程
- eg.
message(STATUS "This is SOURCE dir "${HELLO_SOURCE_DIR})
add_executable
⽣成可执⾏⽂件,eg.ADD_EXECUTABLE(hello ${SRC_LIST})
⽣成的可执⾏⽂件名是hello,源⽂件读取变量SRC_LIST中的内容,也可以直接写ADD_EXECUTABLE(hello main.cpp)
add_subdirectory
⽤于向当前⼯程添加存放源⽂件的⼦⽬录,并可以指定中间⼆进制和⽬标⼆进制存放的位置。eg.ADD_SUBDIRECTORY(src bin)
将src⼦⽬录加⼊⼯程并指定编译输出(包含编译中间结果)路径为bin⽬录;如果不进⾏ bin ⽬录的指定,那么编译结果(包括中间结果)都将存放在build/src ⽬录。include_directories
可以⽤来向⼯程添加多个特定的头⽂件搜索路径,路径之间⽤空格分割。eg.INCLUDE_DIRECTORIES(/usr/include/hello)
- set指令重新定义executable_output_path和library_output_path变量,来指定最终的⽬标⼆进制的位置。
- SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
- SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
target_link_libraries(可执行文件名 链接库路径)
需要放在add_executable
之后,用于指定exe文件生成后,该文件要和什么动态库进行链接。eg.target_link_libraries(motionaveraging /home/dz/cnpy/build/libcnpy.so)
其他
- 变量使⽤
${}
⽅式取值,但是在 IF 控制语句中是直接使⽤变量名 - 指令(参数 1 参数 2…) 参数使⽤括弧括起,参数之间使⽤空格或分号分开
- 指令是⼤⼩写⽆关的,参数和变量是⼤⼩写相关
SET(SRC_LIST main.cpp)
可以写成SET(SRC_LIST “main.cpp”)
,如果源⽂件名中含有空格,就必须要加双引号- ADD_EXECUTABLE(hello main) 后缀可以不写,它会⾃动去找.c和.cpp,最好不要这样写,可能会有这两个⽂件main.cpp和main
- 要创建子目录,则每一个目录下都需要有一个CMakeLists.txt说明