CMake

如何在CMake中设置CMAKE_MODULE_PATH来进行常规和源外构建?
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
set(CMAKE_MODULE_PATH "/usr/local/lib/cmake/Stage ${CMAKE_MODULE_PATH}")

CMAKE 使用

CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。

1.cmake工程使用

  1. $> ccmake directory
  2. $> cmake directory
  3. $> make

其中directory为CMakeList.txt所在目录;

  1. 第一条语句用于配置编译选项,如VTK_DIR目录,一般这一步不需要配置,直接执行第二条语句即可,但当出现错误时,这里就需要认为配置了,这一步才真正派上用场;
  2. 第二条命令用于根据CMakeLists.txt生成Makefile文件;
  3. 第三条命令用于执行Makefile文件,编译程序,生成可执行文件;

2.CMAKE 常用命令解析

  1. CMAKE_MINIMUM_REQUIRED(VERSION 2.8)  #CMake 最低版本要求,低于2.8 构建构过程会被终止
  2. PROJECT(gpuMat) #定义工程名称
  3. FIND_PACKAGE(CUDA REQUIRED) #find_package 为外部工程加载设置。find_package(<package> [version] [EXACT] [QUIET] [[REQUIRED|COMPONENTS] [components...]] [NO_POLICY_SCOPE])
  4. INCLUDE(FindCUDA)  #include 从给定的文件中读取CMake的列表文件。  include(<file|module> [OPTIONAL] [RESULT_VARIABLE <VAR>][NO_POLICY_SCOPE])
  5. INCLUDE_DIRECTORIES(/usr/local/cuda/include) # include_directories 为构建树添加包含路径。include_directories([AFTER|BEFORE] [SYSTEM] dir1 dir2 ...)
  6. FILE(GLOB SOURCES "*.cu" "*.cpp" "*.c" "*.h")
  7. CUDA_ADD_EXECUTABLE(app ${SOURCES}) # add_executable: 使用给定的源文件,为工程引入一个可执行文件。  add_executable(<name> [WIN32] [MACOSX_BUNDLE] [EXCLUDE_FROM_ALL] source1 source2 ... sourceN)
  8. LIST(APPEND CMAKE_CXX_FLAGS "-std=c++0x -O3 -ffast-math -Wall")
  9. TARGET_LINK_LIBRARIES(app /usr/local/cuda/lib64/libcudart.so  ${OpenCV_LIBS}) # 显式指定链接时需要的库文件 

3.LIST用法:

用途:提供一些列表操作

list使用

  1.   list(LENGTH <list><output variable>)
  2.   list(GET <list> <elementindex> [<element index> ...] <output variable>)
  3.   list(APPEND <list><element> [<element> ...])
  4.   list(FIND <list> <value><output variable>)
  5.   list(INSERT <list><element_index> <element> [<element> ...])
  6.   list(REMOVE_ITEM <list> <value>[<value> ...])
  7.   list(REMOVE_AT <list><index> [<index> ...])
  8.   list(REMOVE_DUPLICATES <list>)
  9.   list(REVERSE <list>)
  10.   list(SORT <list>)

文字说明

  1. LENGTH返回列表的长度
  2. GET返回列表中指定下标的元素
  3. APPEND添加新元素到列表中
  4. INSERT 将新元素插入到列表中指定的位置
  5. REMOVE_ITEM从列表中删除某个元素
  6. REMOVE_AT从列表中删除指定下标的元素
  7. REMOVE_DUPLICATES从列表中删除重复的元素
  8. REVERSE 将列表的内容实地反转,改变的是列表本身,而不是其副本
  9. SORT 将列表按字母顺序实地排序,改变的是列表本身,而不是其副本

列表的子命令APPEND, INSERT, REMOVE_AT, REMOVE_ITEM,REMOVE_DUPLICATES, REVERSE以及SORT在当前的CMake变量域创建一些新值。与SET命令类似,即使列表本身是在父域中定义的,LIST命令也只会在当前域创建新的变量值,为了将这些操作的结果向上传递,需要通过SET PARENT_SCOPE, SET CACHE INTERNAL或其他值域扩展的方法。

 注意:在CMake中,一个list是一个由封号;分割的一组字符串。使用set命令可以创建一个list。例如,set(var a b c d e)命令将会创建一个list:a;b;c;d;e;而set(var "a b c d e")命令创建的只是一个字符串,或者说是只有一个项的list。

  当使用指定索引的命令格式时,如果<element index>是大于等于0的数,<element index>是从list第一个项开始的序号,list的第一项的索引是0。如果<element index>小于等于-1,这个索引是从结尾开始的逆向索引,其中-1表示的是list的最后一项。当使用负数索引时,注意它们不是从0开始!-0与0等价,它指向list的第一个成员。

4.FILE

  1.   file(WRITE filename "message to write"... )
  2.   file(APPEND filename "message to write"... )
  3.   file(READ filename variable [LIMIT numBytes] [OFFSET offset] [HEX])
  4.   file(STRINGS filename variable [LIMIT_COUNT num]       [LIMIT_INPUT numBytes] [LIMIT_OUTPUT numBytes] [LENGTH_MINIMUM numBytes] [LENGTH_MAXIMUM numBytes]   [NEWLINE_CONSUME] [REGEX regex]   [NO_HEX_CONVERSION])
  5.   file(GLOB variable [RELATIVE path] [globbing expressions]...)
  6.   file(GLOB_RECURSE variable [RELATIVE path]    [FOLLOW_SYMLINKS] [globbing expressions]...)
  7.   file(RENAME <oldname> <newname>)
  8.   file(REMOVE [file1 ...])
  9.   file(REMOVE_RECURSE [file1 ...])
  10.   file(MAKE_DIRECTORY [directory1 directory2 ...])
  11.   file(RELATIVE_PATH variable directory file)
  12.   file(TO_CMAKE_PATH path result)
  13.   file(TO_NATIVE_PATH path result)
  14.   file(DOWNLOAD url file [TIMEOUT timeout] [STATUS status] [LOG log]  [EXPECTED_MD5 sum] [SHOW_PROGRESS])

 WRITE选项将会写一条消息到名为filename的文件中。如果文件已经存在,该命令会覆盖已有的文件;如果文件不存在,它将创建该文件。APPEND选项和WRITE选项一样,将会写一条消息到名为filename的文件中,只是该消息会附加到文件末尾。READ选项将会读一个文件中的内容并将其存储在变量里。读文件的位置从offset开始,最多读numBytes个字节。如果指定了HEX参数,二进制代码将会转换为十六进制表达方式,并存储在变量里。STRINGS将会从一个文件中将一个ASCII字符串的list解析出来,然后存储在variable变量中。文件中的二进制数据会被忽略。回车换行符会被忽略。它也可以用在Intel的Hex和Motorola的S-记录文件;读取它们时,它们会被自动转换为二进制格式。可以使用NO_HEX_CONVERSION选项禁止这项功能。LIMIT_COUNT选项设定了返回的字符串的最大数量。LIMIT_INPUT设置了从输入文件中读取的最大字节数。LIMIT_OUTPUT设置了在输出变量中存储的最大字节数。LENGTH_MINIMUM设置了要返回的字符串的最小长度;小于该长度的字符串会被忽略。LENGTH_MAXIMUM设置了返回字符串的最大长度;更长的字符串会被分割成不长于最大长度的字符串。NEWLINE_CONSUME选项允许新行被包含到字符串中,而不是终止它们。REGEX选项指定了一个待返回的字符串必须满足的正则表达式。

file(<COPY|INSTALL> files... DESTINATION <dir>
       [FILE_PERMISSIONS permissions...]
       [DIRECTORY_PERMISSIONS permissions...]
       [NO_SOURCE_PERMISSIONS] [USE_SOURCE_PERMISSIONS]
       [FILES_MATCHING]
       [[PATTERN <pattern> | REGEX <regex>]
        [EXCLUDE] [PERMISSIONS permissions...]] [...])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值