Chinaunix首页 | 论坛 | 博客
  • 博客访问: 906487
  • 博文数量: 380
  • 博客积分: 3495
  • 博客等级: 中校
  • 技术积分: 3996
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-02 09:35
文章分类

全部博文(380)

文章存档

2015年(2)

2014年(5)

2013年(9)

2012年(9)

2011年(67)

2010年(103)

2009年(182)

2008年(3)

我的朋友

分类: C/C++

2012-01-05 22:23:25

最近在看blender的代码, 发现它用cmake做编译器,感觉真是相当不错。
用来做跨平台的编译管理真是方便。
原理嘛, 很简单,
cmake的配置文件->cmake->指定的编译器或是IDE的编译文件或是工程文件。
如cmake可以配置生成makefile,用于gcc一类的编译,
也可以生成sln文件, 用于微软的vs系列的编译。
当然也能生成xcode的编译文件,相当方便了。
下面就简单的介绍一下吧。

cmake的官方网站:

来由, 参见wiki,CMake 是為了解決出資的 專案下的 (ITK) 軟體的跨平台建構的需求而創造出來的.

当然了,现在应用相当广泛了。
至少blender, ogre都用cmake了。

cmake使用的文件叫 CMakeLists.txt, 每个要用到cmake控制的目录下都应该放一个。
当然,我们最终直接调用的就是代码根目录下的, CMakeLists.txt。
也就是我们所有的调用 都是从根目录下的CMakeLists.txt开始处理的。

推荐阅读:cmake/help/cmake_tutorial.html

下面注释一下这个页面里的CMakeLists.txt
  1. cmake_minimum_required (VERSION 2.6)
  2. project (Tutorial)

  3. # The version number.
  4. set (Tutorial_VERSION_MAJOR 1)
  5. set (Tutorial_VERSION_MINOR 0)

  6. # does this system provide the log and exp functions?
  7. include (${CMAKE_ROOT}/Modules/CheckFunctionExists.cmake)

  8. check_function_exists (log HAVE_LOG)
  9. check_function_exists (exp HAVE_EXP)

  10. # should we use our own math functions
  11. option(USE_MYMATH
  12. "Use tutorial provided math implementation" ON)

  13. # configure a header file to pass some of the CMake settings
  14. # to the source code
  15. configure_file (
  16. "${PROJECT_SOURCE_DIR}/TutorialConfig.h.in"
  17. "${PROJECT_BINARY_DIR}/TutorialConfig.h"
  18. )

  19. # add the binary tree to the search path for include files
  20. # so that we will find TutorialConfig.h
  21. include_directories ("${PROJECT_BINARY_DIR}")

  22. # add the MathFunctions library?
  23. if (USE_MYMATH)
  24. include_directories ("${PROJECT_SOURCE_DIR}/MathFunctions")
  25. add_subdirectory (MathFunctions)
  26. set (EXTRA_LIBS ${EXTRA_LIBS} MathFunctions)
  27. endif (USE_MYMATH)

  28. # add the executable
  29. add_executable (Tutorial tutorial.cxx)
  30. target_link_libraries (Tutorial ${EXTRA_LIBS})

  31. # add the install targets
  32. install (TARGETS Tutorial DESTINATION bin)
  33. install (FILES "${PROJECT_BINARY_DIR}/TutorialConfig.h"
  34. DESTINATION include)

  35. # does the application run
  36. add_test (TutorialRuns Tutorial 25)

  37. # does the usage message work?
  38. add_test (TutorialUsage Tutorial)
  39. set_tests_properties (TutorialUsage
  40. PROPERTIES
  41. PASS_REGULAR_EXPRESSION "Usage:.*number"
  42. )


  43. #define a macro to simplify adding tests
  44. macro (do_test arg result)
  45. add_test (TutorialComp${arg} Tutorial ${arg})
  46. set_tests_properties (TutorialComp${arg}
  47. PROPERTIES PASS_REGULAR_EXPRESSION ${result}
  48. )
  49. endmacro (do_test)

  50. # do a bunch of result based tests
  51. do_test (4 "4 is 2")
  52. do_test (9 "9 is 3")
  53. do_test (5 "5 is 2.236")
  54. do_test (7 "7 is 2.645")
  55. do_test (25 "25 is 5")
  56. do_test (-25 "-25 is 0")
  57. do_test (0.0001 "0.0001 is 0.01")

阅读(1420) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~