浏览代码

Add support for modules and libraries to CMake.

LuisAntonRebollo 11 年之前
父节点
当前提交
82a36d8a32
共有 1 个文件被更改,包括 53 次插入0 次删除
  1. 53 0
      Tools/CMake/basics.cmake

+ 53 - 0
Tools/CMake/basics.cmake

@@ -73,6 +73,53 @@ macro(addLib lib)
     target_link_libraries(${PROJECT_NAME} "${lib}")
 endmacro()
 
+# adds a library dependency. Are processed on addExecutable or addStaticLib
+macro(addRequiredLibrary lib)
+    #message(STATUS "${PROJECT_NAME} : add lib : ${lib}")
+    LIST( APPEND ${PROJECT_NAME}_required_library ${lib} )    
+endmacro()
+
+# adds a link dependency. Are processed on addExecutable or addStaticLib
+macro(addRequiredLink lib)
+    #message(STATUS "${PROJECT_NAME} : add lib : ${lib}")
+    LIST( APPEND ${PROJECT_NAME}_required_link ${lib} )    
+endmacro()
+
+macro( _processProjectLibrary )
+   # Append currect project to PROJECT_STACK
+   LIST( APPEND PROJECT_STACK "${PROJECT_NAME}" )
+   
+   foreach( lib ${${PROJECT_NAME}_required_library} )
+       #message( "adding library dependency: ${lib}" )
+       include( ${lib} )
+   endforeach()
+   
+   #clear required libraries
+   set( ${PROJECT_NAME}_required_library )
+   
+   # pop currect project form PROJECT_STACK
+   LIST(REMOVE_AT PROJECT_STACK -1)
+   
+   # get currect project form stack
+   if( PROJECT_STACK )      
+      LIST(GET PROJECT_STACK -1 TEMP_PROJECT)
+      project( ${TEMP_PROJECT} )
+   endif()
+   
+   
+endmacro()
+
+macro( _processProjectLinks )
+   #message( "_processProjectLinks: ${PROJECT_NAME}" )
+   foreach( lib ${${PROJECT_NAME}_required_link} )
+       addLib( ${lib} )
+   endforeach()
+   
+   #clear required libraries
+   set( ${PROJECT_NAME}_required_link )
+endmacro()
+
+
 # adds a path to search for libs
 macro(addLibPath dir)
     link_directories(${dir})
@@ -146,6 +193,9 @@ macro(addStaticLib)
     #foreach(dir ${${PROJECT_NAME}_paths})
     addInclude("${firstDir}")
     #endforeach()
+    
+    _processProjectLinks()
+    _processProjectLibrary()
 endmacro()
 
 # macro to add an executable
@@ -161,6 +211,9 @@ macro(addExecutable)
     add_executable("${PROJECT_NAME}" WIN32 ${${PROJECT_NAME}_files})
     # omg - only use the first folder ... otehrwise we get lots of header name collisions
     addInclude("${firstDir}")
+    
+    _processProjectLinks()
+    _processProjectLibrary()
 endmacro()
 
 macro(setupVersionNumbers)