CMake中的字符串及文件操作

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

  write by 九天雁翎(JTianLing) -- blog.csdn.net/vagrxie

  讨论新闻组及文件

   以前写过一篇关于CMake的基本用法的文章(现代软件构建系统的使用 cmake简介...),在最近的使用中,发现一些更复杂情况的使用还有待学习,并且相关的资料也比较少,真正可以依赖的也就(CMake 实践)一文.所以,最近准备将一些非常重要,但是网上资料较少的用法--字符串,文件操作,好好整理一下.目标是,实现一个目录下的多个工程的一次性工程文件生成,而不是为每个工程都建立一个CMake文件,这个需求在我下载一些图书的配套源码时经常碰到,可能大部分的图书作者都习惯于仅仅提供原始源代码文件而不提供工程文件.

 

      特别声明的是,本文并不是一个完备3的CMake教程(以前写的简介也不是),需要相关入门教程的应该去寻找(CMake 实践),那才是你想要的.本文仅仅是作为一些缺失资料的收集,也包括我自己对CMake字符串,文件处理的探索.(真是纯个人探索,网上即使是英文的相关资料也不多,可能毕竟CMake还是不怎么流行吧),仅适合需要的人搜索到这里查看相关信息.

 

  本文内容:

 

      实际上,本文研究的仅仅包括CMake的以下两部分,已经一些if,else中对字符串的判断.在本文中,由于目的不同,主要将会把CMake作为一种普通的编程语言来对待,(其实它本来就是)甚至很多地方根本不建工程,请注意.

  string: String operations.
string(REGEX MATCH (regular_expression)
  (output variable) (input) [(input)...])
  string(REGEX MATCHALL (regular_expression)
  (output variable) (input) [(input)...])
  string(REGEX REPLACE (regular_expression)
  (replace_expression) (output variable)
  (input) [(input)...])
  string(REPLACE (match_string)
  (replace_string) (output variable)
  (input) [(input)...])
  string(COMPARE EQUAL (string1) (string2) (output variable))
  string(COMPARE NOTEQUAL (string1) (string2) (output variable))
  string(COMPARE LESS (string1) (string2) (output variable))
  string(COMPARE GREATER (string1) (string2) (output variable))
  string(ASCII (number) [(number) ...] (output variable))
  string(CONFIGURE (string1) (output variable)
  [@ONLY] [ESCAPE_QUOTES])
  string(TOUPPER (string1) (output variable))
  string(TOLOWER (string1) (output variable))
  string(LENGTH (string) (output variable))
  string(SUBSTRING (string) (begin) (length) (output variable))
  string(STRIP (string) (output variable))
  string(RANDOM [LENGTH (length)] [ALPHABET (alphabet)]
  (output variable))

 
    

    file: File manipulation command.
file(WRITE filename "message to write"... )
    file(APPEND filename "message to write"... )
    file(READ filename variable [LIMIT numBytes] [OFFSET offset] [HEX])
    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])
    file(GLOB variable [RELATIVE path] [globbing expressions]...)
    file(GLOB_RECURSE variable [RELATIVE path]
    [FOLLOW_SYMLINKS] [globbing expressions]...)
    file(REMOVE [file1 ...])
    file(REMOVE_RECURSE [file1 ...])
    file(MAKE_DIRECTORY [directory1 directory2 ...])
    file(RELATIVE_PATH variable directory file)
    file(TO_CMAKE_PATH path result)
    file(TO_NATIVE_PATH path result)
    file(DOWNLOAD url file [TIMEOUT timeout] [STATUS status] [LOG log])
 

 

      

  以上列表来自于CMake最新的文档:http://www.cmake.org/cmake/help/cmake2.6docs.html

    实验方式: 

      完全依靠CMake的GUI工具,通过configure的输出来获取实验结果.最终的结果就是为我的博客所有源代码重建工程,以后在博客源代码中仅保留CMake的配置文件,不再保留工程, 保留工程很有局限性,比如Linux下没有makefile是很有问题的,个人建工程的时候用的是VS2008,这样VS2005的使用者也会很郁闷(虽然改个版本号就可以用),再加上以前刚开始学习OpenGL的时候非常短视,为了方便自己,将GLUT等库都装在系统目录下,这样的确是方便了自己,但是任何人clone的源代码都无法顺利运行,必须首先装一套配套的库才行,这可不是太好的工程管理方法,这次顺面解决.原来的源代码目录完全按照日期分目录,每天又分很多示例,很有典型意义.
 
      比如说(  DirectX 9.0 3D游戏开发编程基础)--( d3d龙书)(英文名:(Introduction to 3D Game Programming with DirectX 9.0))的附带源码仅有源代码文件,分散在N个目录(每章一个目录+每章每个示例一个目录),也与我的博客中源代码的分配很类似,事实上,很多书籍配套的源代码都有这样的问题,通过这样的方法可以一次解决.没有CMake的时候,想OpenGL红宝书,D3d龙书,3D游戏编程大师这样的书的源代码你得分别建几十个工程才能很好的在Windows下使用,这是非常让人郁闷的事情,你郁闷吗?我想,我可以通过这中方法搞定这些源代码,弄一个配套的project放在google code上,方便大家;),辛苦我一人,方便千万家的工作,那是责无旁贷的完成啊:)
 
      本文顺面用于介绍CMake的强大及其推广,按照开源的理念,即使我没有真的参与某个开源产品的研发,我实际的使用了它,这是第一层次的支持,使用后感觉不错,向大家推广,这是第二层次的支持,我决定将我对CMake的支持上升一个层次(以前写简介的时候就上升过了)
 

   

 

    实验过程 

 
    我的HelloWord: 
 
    获取某个源代码目录下的所有源代码,而不需要单个的列举,这是个很大的进步,在( 现代软件构建系统的使用 

你可能感兴趣的:(CMake中的字符串及文件操作)