CMake基本命令

cmake_minimum_required

描述:指定能够支持构建本工程的CMake的最低版本

使用:

cmake_minimum_required(VERSIONmajor[.minor[.patch[.tweak]]][FATAL_ERROR])

举例:

<span style="color:#000000;">cmake_minimum_required(VERSION 2.8)   #要求CMake的最低版本是2.8,如果当前的cmake程序的版本低于2.8将停止构建过程并产生一个错误。</span>

 

project

描述:指定待构建工程的名称

使用:

project(<projectname> [languageName1 languageName2 ...])

举例:

<pre class="cpp" name="code"><span style="color:#000000;">project(myapp)                      #如果没有指定语言,将使用默认语言C和CXX。
project(myapp C)                    #指定使用C语言,不使用CXX。
project(myapp CXX)                  #指定使用CXX,不使用C。</span>
 

 

set

描述:给CMake变量,缓存变量或环境变量赋值,或创建一个变量并赋值

使用:

set(<variable> <value> [[CACHE <type> <docstring> [FORCE]] |PARENT_SCOPE])

举例:

<span style="color:#000000;">set(PREFIX${CMAKE_INSTALL_PREFIX})                      #创建变量PREFIX并设置其值为${CMAKE_INSTALL_PREFIX}
set(SRCS a.c b.c c.c)                                   #创建变量SRCS,其值为以分号分隔的一组值"a.c;b.c;c.c"
set(ENV{PATH} /home/martink)                            #设置环境变量PATH</span>


if

描述:条件判断

使用:

  if(expression)
    # then section.
    COMMAND1(ARGS ...)
    COMMAND2(ARGS ...)
    ...
  elseif(expression2)
    # elseif section.
    COMMAND1(ARGS ...)
    COMMAND2(ARGS ...)
    ...
  else(expression)
    # else section.
    COMMAND1(ARGS ...)
    COMMAND2(ARGS ...)
    ...
  endif(expression)

举例:表达式是常量,如果常量是1,ON,YES,TRUE,Y或非0数字返回True;如果常量是0,OFF,NO,FALSE,N,IGNORE,NOTFOUND或以"-NOTFOUND"结尾返回False。

if(<constant>)

举例:表达式是变量

if(<variable>)
if(NOT <expression>)
if(<expr1> AND <expr2>)
if(<expr1> OR <expr2>)

举例:

if(EXISTS file-name)    #文件存在
if(EXISTS directory-name) #目录存在
if(IS_DIRECTORY directory-name) #是目录
if(<variable|string> MATCHES regex) #匹配正规表达式
#数字比较
if(<variable|string> LESS <variable|string>)
if(<variable|string> GREATER <variable|string>)
if(<variable|string> EQUAL <variable|string>)
#字符串比较
if(<variable|string> STRLESS <variable|string>)
if(<variable|string> STRGREATER <variable|string>)
if(<variable|string> STREQUAL <variable|string>)
#变量已定义
if(DEFINED <variable>)

 

message

描述:打印信息

使用:

message([STATUS|WARNING|AUTHOR_WARNING|FATAL_ERROR|SEND_ERROR] "message to display" ...)

举例:

<span style="color:#000000;">message("hello world!")        #
message(STATUS "Install Path: ${CMAKE_INSTALL_PREFIX}")     #
message(FATAL_ERROR "can't find db file")                   # 打印信息并终止</span>

 

include

描述:从另外一个文件或模块加载和执行CMake代码

使用:

include(<file|module> [OPTIONAL] [RESULT_VARIABLE <VAR>] [NO_POLICY_SCOPE])

举例:

include(${MODEL_CONFIG_INCLUDE_DIRS}/model-config-options.cmake)            #包含文件
#包含模块
include(FindPkgConfig)
pkg_check_modules(LIB_PKGS REQUIRED gtk+-2.0)

FOREACH(flag ${LIB_PKGS_CFLAGS})
    SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
ENDFOREACH(flag)

SET(CMAKE_C_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_CFLAGS} -fPIC -Wall")
SET(CMAKE_C_FLAGS_DEBUG "-O0 -g")
SET(CMAKE_C_FLAGS_RELEASE "-O2 -g")



add_definitions

描述:为源文件添加宏定义

使用:

add_definitions(-DFOO -DBAR ...)

举例:

ADD_DEFINITIONS("-DIMAGEDIR=\"${IMAGEDIR}\"")        # 设置宏IMAGEDIR,源程序可以直接使用该宏
ADD_DEFINITIONS("-D\"${RESOLUTION}\"")
ADD_DEFINITIONS("-D_LINUX")



include_directories

描述:为构建指定头文件所在路径

使用:

include_directories([AFTER|BEFORE] [SYSTEM] dir1 dir2 ...)

举例:

include_directories(src/include include)


add_subdirectory

描述:增加子目录到本构建,source_dir中包括源文件和CMakeLists.txt文件

使用:

add_subdirectory(source_dir [binary_dir] [EXCLUDE_FROM_ALL])

举例:

<pre class="cpp" name="code">add_subdirectory(src)                                 # src子目录的源代码和CMakeLists.txt参与本工程的构建
add_subdirectory(examples EXCLUDE_FROM_ALL)           # 子目录example的目标文件不随本工程一起产生
 

add_library

描述:使用指定的源文件构建一个名称为name的库, lib<name>.a lib<name>.so

使用:

add_library(<name> [STATIC|SHARED|MODULE] [EXCLUDE_FROM_ALL] source1 source2 ... sourceN)

举例:

<pre class="cpp" name="code">add_library(${PROJECT_NAME} STATIC ${SRC})           # src子目录的源代码和CMakeLists.txt参与本工程的构建
add_library(${PROJECT_NAME} SHARED ${SRC})           # 子目录example的目标文件不随本工程一起产生
 

 

add_executable

描述:使用指定的源文件构建一个名称为name的应用程序

使用:

add_executable(<name> [WIN32] [MACOSX_BUNDLE] [EXCLUDE_FORM_ALL] source1 source2 ... sourceN)

举例:

<pre class="cpp" name="code">add_executable(${PROJECT_NAME} ${SRC})           # src子目录的源代码和CMakeLists.txt参与本工程的构建
 

 

target_link_libraries

描述:使用指定的库与目标链接

使用:

target_link_libraries(<target> [item1 [item2 [...]]] [[debug|optimized|general] <item>] ...)

举例:

<pre class="cpp" name="code">target_link_libraries(${PROJECT_NAME} ${PKGS_LDFLAGS})       # ${PKGS_LDFLAGS}由pkg_check_modules(PKGS REQUIRED gtk+-2.0)产生
 

 

set_target_properties

描述:设置目标属性

使用:

set_target_properties(target1 target2 ... PROPERTIES prop1 value1 prop2 value2 ...)

举例:

<pre class="cpp" name="code">set_target_properties(mylib-static PROPERTIES OUT_NAME "mylib" PERFIX "lib") # libmylib-static.a -> libmylib.a
set(VERSION 0.0.1)
add_library(mylib SHARED ${SRCS})
set_target_properties(mylib PROPERTIES SOVERSION ${VERSION}) # create symblink mylib.so.0.0.1
 

 

configure_file

描述:配置目标属性

使用:

configure_file(<input> <output> [COPYONLY] [ESCAPE_QUOTES] [@ONLY] [NEWLINE_STYLE [UNIX|DOS|WIN32|LF|CRLF] ])

举例:

CMakeLists.txt
set(PREFIX ${CMAKE_INSTALL_PREFIX})
set(LIBDIR "${PREFIX}/lib")
set(INCLUDEDIR "${PREFIX}/include")
set(VERSION 0.0.1)
configure_file(${PROJECT_NAME}.pc.in ${PROJECT_NAME}.pc @ONLY)      # 只替换文件中@var@变量
####################################################
pc.in file:
prefix=@PREFIX@
exec_prefix=@PREFIX@
libdir=@LIBDIR@
includedir=@INCLUDEDIR@
Name: XXXXXX
Description: XXX library
Version: @VERSION@
Libs: -L${libdir} -l@PROJECT_NAME@
Cflags: -I${includedir}
####################################################
pc file: if CMAKE_INSTALL_PREFIX=/usr
prefix=/usr
exec_prefix=/usr
libdir=/usr/lib
includedir=/usr/include
Name: XXXXXX
Description: XXX library
Version: 0.0.1
Libs: -L${libdir} -l@PROJECT_NAME@
Cflags: -I${includedir}


 

install

描述:定义安装阶段的脚本

使用:

install(type src DESTINATION dest)

举例:

install(TARGETS ${PROJECT_NAME} DESTINATION /usr/lib) # install the shared library to /usr/lib
install(FILES ${CMAKE_BINARY_DIR}/${PROJECT_NAME}.pc DESTINATION /usr/lib/pkgconfig) # install pc file to /usr/lib/pkgconfig
install(DIRECTORY ${CMAKE_SOURCE_DIR}/images DESTINATION /usr/share/project) # install images fold to /usr/share/project/images


 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值