cmake 笔记

来源:互联网 发布:淘宝网休闲运动套装 编辑:程序博客网 时间:2024/04/28 14:36

CMAKE_MINIMUM_REQUIRED( VERSION 2.6 FATAL_ERROR )


PROJECT( rec_plugins )


#要显示执行构建过程中详细的信息(比如为了得到更详细的出错信息),可以在CMakeList.txt内加入:
SET (CMAKE_VERBOSE_MAKEFILE   on)


SET (CMAKE_CXX_COMPILER "g++")
SET (CMAKE_CXX_FLAGS "-std=c++0x -fPIC -Wall -O2 -DNEWARCH -DPOSIX -DPOSIX -DMONGO_HAVE_STDINT -D__STDC_LIMIT_MACROS")
SET (CMAKE_C_FLAGS "-fPIC -Wall -O2 -DNEWARCH -DPOSIX -DMONGO_HAVE_STDINT -fno-strict-aliasing -fwrapv -Wstrict-prototypes")


MESSAGE ( STATUS "**************** Release ****************" )


#${${PROJECT_NAME}_SOURCE_DIR} 本文件所在目录的绝对路径

GET_FILENAME_COMPONENT( PROJECT_BUILD_DIR "${${PROJECT_NAME}_SOURCE_DIR}" ABSOLUTE)
GET_FILENAME_COMPONENT( PROJECT_ROOT_DIR "${PROJECT_BUILD_DIR}/../" ABSOLUTE )
GET_FILENAME_COMPONENT( PROJECT_CMAKE_DIR "${PROJECT_BUILD_DIR}/cmake/" ABSOLUTE )


# Print debug message
MESSAGE( STATUS "DEBUG: ${PROJECT_NAME}_SOURCE_DIR ${${PROJECT_NAME}_SOURCE_DIR}" )
MESSAGE( STATUS "DEBUG: PROJECT_ROOT_DIR ${PROJECT_ROOT_DIR}" )
MESSAGE( STATUS "DEBUG: PROJECT_CMAKE_DIR ${PROJECT_CMAKE_DIR}" )


# optional cmake file

#从给定的文件中读取CMake的清单文件代码。在清单文件中的命令会被立即处理,就像它们是写在这条include命令展开的地方一样。

INCLUDE( "cmake/contrib.cmake" OPTIONAL )
INCLUDE( "cmake/bootstrap.cmake" OPTIONAL )
INCLUDE( "cmake/UseIce.cmake" OPTIONAL )


# ----------------------------------------------------------------------------------
SET ( REC_PLUGIN_DIR "${PROJECT_ROOT_DIR}/src" )


# GLOB选项将会为所有匹配查询表达式的文件生成一个文件list,并将该list存储进变量variable里。文件名查询表达式与正则表达式类似,只不过更加简单。
FILE( GLOB REC_PLUGINS RELATIVE "${REC_PLUGIN_DIR}" "${REC_PLUGIN_DIR}/[a-zA-Z]?*")


MESSAGE ( STATUS "REC_PLUGIN_DIR: ${REC_PLUGIN_DIR}" )
MESSAGE ( STATUS "REC_PLUGINS: ${REC_PLUGINS}" )

FOREACH ( rec_plugin ${REC_PLUGINS} )
  FILE( GLOB REC_PLUGIN_SOURCE
       "${PROJECT_ROOT_DIR}/src/${rec_plugin}/*.cpp")
        MESSAGE (STATUS "${REC_PLUGIN_SOURCE}")
  ADD_LIBRARY(${rec_plugin} SHARED "${REC_PLUGIN_SOURCE}")
 


#将给定的库链接到一个目标上。  target_link_libraries(<target> [item1 [item2 [...]]] [[debug|optimized|general] <item>] ...)
        TARGET_LINK_LIBRARIES(${rec_plugin}   librule_engine_grammar.so  libGlacier2.so   )

#设置目标的一些属性来改变它们构建的方式。set_target_properties(target1 target2 ...PROPERTIES prop1 value1prop2 value2 ...)PREFIX和SUFFIX属性覆盖#了默认的目标名前缀(比如lib)和后缀(比如.so)

  SET_TARGET_PROPERTIES(${rec_plugin} PROPERTIES PREFIX "")
ENDFOREACH ( rec_plugin )



0 0
原创粉丝点击