1、语法:
#注释行
Lists A;B;C
变量:{VAR}
条件结构:IF() ... ELSE()/ELSEIF() ... ENDIF()
WHILE() ... ENDWHILE()
FOREAH() ... ENDFOREACH()
2、CMake变量
CMAE_MODULE_PATH:CMake Modules的路径;
CMAKE_INSTALL_PRFIX:make install路径;
CMAKE_BUILD_TYPE:BUILD类型(Debug,Release);
BUILD_SHARE_LIBS:动态库还是静态库选项(cmake -DBUILD_SHARE_LIBS=OFF);
3、CMake方法
子目录:
SUBDIRS(Dir1, Dir2)
ADD_SUBDIRECTORY(Dir1)
ADD_SUBDIRECTORY(Dir2)
宏定义:
ADD_DEFINITION("-Wall -ansi -pedantic")
依赖:
ADD_DEPENDENCIES(TARGET DEPEND1 DEPED2)
目标文件:
ADD_EXECUTABLE:编译为可执行文件;
ADD_LIBRARY:编译为库文件;
链接所依赖的库文件:
TARGET_LINK_LIBRARY(TARGET-NAME LIB1 LIB2) 指定单个目标文件的库文件依赖;
LINK_LIBRARIES(LIB1 LIB2) 指定所有目标文件的库文件依赖;
安装:
INSTALL(FILES FILE1 FILE2 FILE3 DESTINATION .) 安装FILE1、FILE2、FILE3到.路径;
输出:
MESSAGE(STATUS|FATAL_ERROR "message")
LIST函数:
APPEND, INSERT, LENGTH, GET, REMOVE_ITEM, REMOVE_A, SORT等;
STRING函数:
TOUPPER, TOLOWER, LENGTH, SUSTRING, REPLACE等;
3、示例:
目录结构:
CMakeLists.txt
内容:PROJECT(HELLO)
ADD_SUBDIECTORY(Hello)
ADD_SUBDIECTORY(Test)
Hello
CMakeLists.txt
内容:ADD_LIBRARY(Hellohello.cpp)
hello.h
hello.cpp
Test
CMakeLists.txt
内容:INCLUDE_DIRECTORIES({HELLO_SOURCE_DIRECTORY}/Hello)
ADD_EXECUTABLE(helloworld test.cpp)
TARGET_LINK_LIBRARY(helloworld Hello)
test.cpp
转摘:
1、ADD_DEFINITIONS
向 C/C++编译器添加-D 定义,比如:ADD_DEFINITIONS(-DENABLE_DEBUG -DABC)
2、CMAKE_C_FLAGS/CMAKE_CXX_FLAGS
添加其他的编译器开关;
3、ADD_DEPENDENCIES
定义 target 依赖的其他 target,确保在编译本 target 之前,其他的 target 已经被构建
4、AUX_SOURCE_DIRECTORY
发现一个目录下所有的源代码文件并将列表存储在一个变量中;
AUX_SOURCE_DIRECTORY(dir VARIABLE)
5、EXEC_PROGRAM
在 CMakeLists.txt 处理过程中执行命令,并不会在生成的 Makefile 中执行
语法为:
EXEC_PROGRAM(Executable [directory in which to run]
[ARGS <arguments to executable>]
[OUTPUT_VARIABLE <var>]
[RETURN_VALUE <var>])
用于在指定的目录运行某个程序,通过 ARGS 添加参数,如果要获取输出和返回值,可通过OUTPUT_VARIABLE 和 RETURN_VALUE 分别定义两个变量.
6、FILE
文件操作指令,基本语法为:
FILE(WRITE filename "message to write"... )
FILE(APPEND filename "message to write"... )
FILE(READ filename variable)
FILE(GLOB variable [RELATIVE path] [globbing expression_rs]...)
FILE(GLOB_RECURSE variable [RELATIVE path] [globbing expression_rs]...)
FILE(REMOVE [directory]...)
FILE(REMOVE_RECURSE [directory]...)
FILE(MAKE_DIRECTORY [directory]...)
FILE(RELATIVE_PATH variable directory file)
FILE(TO_CMAKE_PATH path result)
FILE(TO_NATIVE_PATH path result)