일반적으로 사용되는 변수 및 명령 구문 분석을 cmake

변수

일부 미리 정의 된 변수를 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 … ) 向工程添加多个特定的头文件搜索路径,路径之间用空格分隔,如果路径包含空格,可以使用双引号将它括起来,默认的行为为追加到当前头文件搜索路径的后面。有如下两种方式可以控制搜索路径添加的位置:
  • CMAKE_INCLUDE_DIRECTORIES_BEFORE,通过SET这个cmake变量为on,可以将添加的头文件搜索路径放在已有路径的前面
  • 通过AFTER或BEFORE参数,也可以控制是追加还是置前
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_

 

  • FIND_FILE(<VAR> name path1 path2 …) VAR变量代表找到的文件全路径,包含文件名
  • FIND_LIBRARY(<VAR> name path1 path2 …) VAR变量代表找到的库全路径,包含库文件
  • FIND_PATH(<VAR> name path1 path2 …) VAR变量代表包含这个文件的路径
  • FIND_PROGRAM(<VAR> name path1 path2 …) VAR变量代表包含这个程序的全路径
  • FIND_PACKAGE(<name> [major.minor] [QUIET] [NO_MODULE] [[REQUIRED | COMPONENTS] [componets …]])   用来调用预定义在CMAKE_MODULE_PATH下的Find<name>.cmake模块,你也可以自己定义Find<name>模块,通过SET(CMAKE_MODULE_PATH dir)将其放入工程的某个目录供工程使用
IF

数字比较表达式
IF (variable LESS number)
IF (string LESS number)
IF (variable GREATER number)
IF (string GREATER number)
IF (variable EQUAL number)
IF (string EQUAL number)

按照字母表顺序进行比较
IF (variable STRLESS string)
IF (string STRLESS string)
IF (variable STRGREATER string)
IF (string STRGREATER string)
IF (variable STREQUAL string)
IF (string STREQUAL string)

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为步进,
注意:直到遇到ENDFOREACH指令,整个语句块才会得到真正的执行。

추천

출처www.cnblogs.com/wangzxblog/p/11843072.html