最近在看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
- cmake_minimum_required (VERSION 2.6)
-
project (Tutorial)
-
-
# The version number.
-
set (Tutorial_VERSION_MAJOR 1)
-
set (Tutorial_VERSION_MINOR 0)
-
-
# does this system provide the log and exp functions?
-
include (${CMAKE_ROOT}/Modules/CheckFunctionExists.cmake)
-
-
check_function_exists (log HAVE_LOG)
-
check_function_exists (exp HAVE_EXP)
-
-
# should we use our own math functions
-
option(USE_MYMATH
-
"Use tutorial provided math implementation" ON)
-
-
# configure a header file to pass some of the CMake settings
-
# to the source code
-
configure_file (
-
"${PROJECT_SOURCE_DIR}/TutorialConfig.h.in"
-
"${PROJECT_BINARY_DIR}/TutorialConfig.h"
-
)
-
-
# add the binary tree to the search path for include files
-
# so that we will find TutorialConfig.h
-
include_directories ("${PROJECT_BINARY_DIR}")
-
-
# add the MathFunctions library?
-
if (USE_MYMATH)
-
include_directories ("${PROJECT_SOURCE_DIR}/MathFunctions")
-
add_subdirectory (MathFunctions)
-
set (EXTRA_LIBS ${EXTRA_LIBS} MathFunctions)
-
endif (USE_MYMATH)
-
-
# add the executable
-
add_executable (Tutorial tutorial.cxx)
-
target_link_libraries (Tutorial ${EXTRA_LIBS})
-
-
# add the install targets
-
install (TARGETS Tutorial DESTINATION bin)
-
install (FILES "${PROJECT_BINARY_DIR}/TutorialConfig.h"
-
DESTINATION include)
-
-
# does the application run
-
add_test (TutorialRuns Tutorial 25)
-
-
# does the usage message work?
-
add_test (TutorialUsage Tutorial)
-
set_tests_properties (TutorialUsage
-
PROPERTIES
-
PASS_REGULAR_EXPRESSION "Usage:.*number"
-
)
-
-
-
#define a macro to simplify adding tests
-
macro (do_test arg result)
-
add_test (TutorialComp${arg} Tutorial ${arg})
-
set_tests_properties (TutorialComp${arg}
-
PROPERTIES PASS_REGULAR_EXPRESSION ${result}
-
)
-
endmacro (do_test)
-
-
# do a bunch of result based tests
-
do_test (4 "4 is 2")
-
do_test (9 "9 is 3")
-
do_test (5 "5 is 2.236")
-
do_test (7 "7 is 2.645")
-
do_test (25 "25 is 5")
-
do_test (-25 "-25 is 0")
-
do_test (0.0001 "0.0001 is 0.01")
阅读(1430) | 评论(0) | 转发(0) |