변수
일부 미리 정의 된 변수를 cmake
PROJECT_SOURCE_DIR | 프로젝트의 루트 디렉토리 |
PROJECT_BINARY_DIR | 실행 cmake 디렉토리 명령, 보통 $ {PROJECT_SOURCE_DIR} / 빌드 |
CMAKE_INCLUDE_PATH | 환경 변수, 변수가 아닌 cmake |
CMAKE_LIBRARY_PATH | 환경 변수 |
CMAKE_CURRENT_SOURCE_DIR | CMakeLists.txt 현재 프로세스의 경로 |
CMAKE_CURRENT_BINARY_DIR | 대상 빌드 디렉토리 이 변수의 값을 변경할 수 있습니다 ADD_SURDIRECTORY (SRC 함)를 사용하여 이 변수에 영향을주지 않습니다 SET (EXECUTABLE_OUTPUT_PATH <새 경로>), 단지 최종 목표에 파일 저장 경로를 변경 |
CMAKE_CURRENT_LIST_FILE | CMakeLists.txt의 출력 변수의 전체 경로를 호출 |
CMAKE_CURRENT_LIST_LINE | 라인 출력이 변수가 있습니다 |
CMAKE_MODULE_PATH | 자신의 cmake 모듈 경로 정의 SET (CMAKE_MODULE_PATH $ {PROJECT_SOURCE_DIR} / cmake), (가) 명령을 포함 다음 자신의 모듈을 호출하는 데 사용할 수 있습니다 |
EXECUTABLE_OUTPUT_PATH | 대상 바이너리 실행 파일의 저장 위치를 재정의 |
LIBRARY_OUTPUT_PATH | 대상 연결 라이브러리 파일의 저장 위치를 재정의 |
PROJECT_NAME | 지침 PROJECT에 의해 정의 된 프로젝트의 이름을 돌려줍니다 |
CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS | 는 IF ELSE 문을 제어하는 데 사용되는 표기 |
시스템 변수
CMAKE_MAJOR_VERSION | 같은 3.8.5 3 주 버전 번호를 cmake |
CMAKE_MINOR_VERSION | cmake 마이너 버전 번호와 같은 3.8.5 (8) |
CMAKE_PATCH_VERSION | cmake 패치 수준 등 3.8.5 (5)에서 |
CMAKE_SYSTEM | 시스템 이름 |
CAMKE_SYSTEM_NAME | 이 시스템 이름의 버전이 포함되어 있지 않습니다 |
CMAKE_SYSTEM_VERSION | 시스템 버전 |
CMAKE_SYSTEM_PROCESSOR | 프로세서 이름 |
UNIX | 모든 UNIX와 같은 OS X 등 TRUE로 플랫폼, Cygwin에서 |
WIN32 | TRUE 모든 Win32 플랫폼에 포함 Cygwin에서 |
스위치 옵션
BUILD_SHARED_LIBS | 제어 기본 라이브러리 컴파일 모드. 를 사용 ADD_LIBRARY 시간을 설정하지 및 라이브러리 유형을 지정하지 않으면 기본 라이브러리 (약간 확인 T3에서 수정 될 수 있습니다) 정적 라이브러리를 컴파일 |
CMAKE_C_FLAGS | 설정 C 컴파일러 옵션 |
CMAKE_CXX_FLAGS | C ++ 컴파일러 옵션 설정 |
일반적으로 사용되는 명령을 cmake
기본 구문 규칙 :
- cmake 변수 $ {}의 값으로하지만, IF 문 제어 변수 이름으로 사용
- 환경 변수는 SET를 사용하여, ENV {} 모드 값을 $ (ENV {VAR} VALUE) 지정
- 명령 (매개 변수 1 매개 변수 2, ...)
파라미터는 괄호 안에 또는 세미콜론 파라미터 사이의 공간을 구분
에 예 ADD_EXECUTABLE 지침 :
ADD_EXECUTABLE (헬로은 main.c의 FUNC.C)
또는
ADD_EXECUTABLE (헬로을 main.c, FUNC.C)
- 명령은 매개 변수와 변수의 경우 관련되어, 소문자를 구분하지 않습니다. 우리는 당신이 모든 자본 지시어를 사용하는 것이 좋습니다
일반적인 명령
계획 | 프로젝트 (프로젝트 이름 [CXX] [C] [자바]) | 프로젝트 이름 및 지정된 프로젝트 지원되는 언어를 지정합니다. 지원되는 언어 목록은 기본 지원하는 모든 언어에 의해 무시 될 수있다 |
세트 | SET (VAR [VALUE] [CACHE TYPE 참조 문 [FORCE]) | 변수의 정의 (예를 SET (006 SRC_LIST의 util.c의 reactor.c 같이 VALUE를 복수 형성 할 수있다)) |
메시지 | MESSAGE([SEND_ERROR | STATUS | FATAL_ERROR] “message to display” …) | 向终端输出用户定义的信息或变量的值 SEND_ERROR, 产生错误,生成过程被跳过 STATUS, 输出前缀为—的信息 FATAL_ERROR, 立即终止所有cmake过程 |
ADD_EXECUTABLE | ADD_EXECUTABLE(bin_file_name ${SRC_LIST}) | 生成可执行文件 |
ADD_LIBRARY | ADD_LIBRARY(libname [SHARED | STATIC | MODULE] [EXCLUDE_FROM_ALL] SRC_LIST) | 生成动态库或静态库 SHARED 动态库 STATIC 静态库 MODULE 在使用dyld的系统有效,若不支持dyld,等同于SHARED EXCLUDE_FROM_ALL 表示该库不会被默认构建 |
SET_TARGET_PROPERTIES | 设置输出的名称,设置动态库的版本和API版本 | |
CMAKE_MINIMUM_REQUIRED | CMAKE_MINIMUM_REQUIRED(VERSION version_number [FATAL_ERROR]) | 声明CMake的版本要求 |
ADD_SUBDIRECTORY | ADD_SUBDIRECTORY(src_dir [binary_dir] [EXCLUDE_FROM_ALL]) | 向当前工程添加存放源文件的子目录,并可以指定中间二进制和目标二进制的存放位置 EXCLUDE_FROM_ALL含义:将这个目录从编译过程中排除 |
INCLUDE_DIRECTORIES | INCLUDE_DIRECTORIES([AFTER | BEFORE] [SYSTEM] dir1 dir2 … ) | 向工程添加多个特定的头文件搜索路径,路径之间用空格分隔,如果路径包含空格,可以使用双引号将它括起来,默认的行为为追加到当前头文件搜索路径的后面。有如下两种方式可以控制搜索路径添加的位置:
|
LINK_DIRECTORIES | LINK_DIRECTORIES(dir1 dir2 …) | 添加非标准的共享库搜索路径 |
TARGET_LINK_LIBRARIES | TARGET_LINK_LIBRARIES(target lib1 lib2 …) | 为target添加需要链接的共享库 |
ADD_DEFINITIONS | ADD_DEFINITIONS(-DENABLE_DEBUG -DABC) | 向C/C++编译器添加-D定义,参数之间用空格分隔 |
ADD_DEPENDENCIES | ADD_DEPENDENCIES(target-name depend-target1 depend-target2 …) | 定义target依赖的其他target,确保target在构建之前,其依赖的target已经构建完毕 |
AUX_SOURCE_DIRECTORY | AUX_SOURCE_DIRECTORY(dir VAR) | 发现一个目录下所有的源代码文件并将列表存储在一个变量中 把当前目录下的所有源码文件名赋给变量DIR_HELLO_SRCS |
EXEC_PROGRAM | EXEC_PROGRAM(Executable [dir where to run] [ARGS <args>][OUTPUT_VARIABLE <var>] [RETURN_VALUE <value>]) | 用于在指定目录运行某个程序(默认为当前CMakeLists.txt所在目录),通过ARGS添加参数,通过OUTPUT_VARIABLE和RETURN_VALUE获取输出和返回值 |
INCLUDE | INCLUDE(file [OPTIONAL]) 用来载入CMakeLists.txt文件 INCLUDE(module [OPTIONAL])用来载入预定义的cmake模块 |
OPTIONAL参数的左右是文件不存在也不会产生错误 可以载入一个文件,也可以载入预定义模块(模块会在CMAKE_MODULE_PATH指定的路径进行搜索) 载入的内容将在处理到INCLUDE语句时直接执行 |
FIND_ |
|
|
IF | 数字比较表达式 按照字母表顺序进行比较 |
IF (expression), expression不为:空,0,N,NO,OFF,FALSE,NOTFOUND或<var>_NOTFOUND,为真 IF (not exp), 与上面相反 IF (var1 AND var2) IF (var1 OR var2) IF (COMMAND cmd) 如果cmd确实是命令并可调用,为真 IF (EXISTS dir) IF (EXISTS file) 如果目录或文件存在,为真 IF (file1 IS_NEWER_THAN file2),当file1比file2新,或file1/file2中有一个不存在时为真,文件名需使用全路径 IF (IS_DIRECTORY dir) 当dir是目录时,为真 IF (DEFINED var) 如果变量被定义,为真 IF (var MATCHES regex) 此处var可以用var名,也可以用${var} IF (string MATCHES regex) |
WHILE |
WHILE(condition)
COMMAND1(ARGS ...)
COMMAND2(ARGS ...)
...
ENDWHILE(condition)
|
其真假判断条件可以参考IF指令 |
FOREACH | FOREACH指令的使用方法有三种形式: 列表:FOREACH(loop_var arg1 arg2 ...)
COMMAND1(ARGS ...)
COMMAND2(ARGS ...)
...
ENDFOREACH(loop_var)
范围:FOREACH(loop_var RANGE total)
COMMAND1(ARGS ...)
COMMAND2(ARGS ...)
...
ENDFOREACH(loop_var)
范围和步进:FOREACH(loop_var RANGE start stop [step])
COMMAND1(ARGS ...)
COMMAND2(ARGS ...)
...
ENDFOREACH(loop_var)
从start开始到stop结束,以step为步进, |