将osg源码分割成osgCore+osgPlugins独立的两部分,osgPlugins可以独立编译,其整合文件及命令行:
1.目录组织结构如下:
2.命令行:
生成工程:
编译:
3.整合文件(CMakeLists.txt):
################################################################################
# Installation stuff
SET(CMAKE_DEBUG_POSTFIX "d" CACHE STRING "add a postfix, usually d on windows")
SET(CMAKE_RELEASE_POSTFIX "" CACHE STRING "add a postfix, usually empty on windows")
SET(CMAKE_RELWITHDEBINFO_POSTFIX "rd" CACHE STRING "add a postfix, usually empty on windows")
SET(CMAKE_MINSIZEREL_POSTFIX "s" CACHE STRING "add a postfix, usually empty on windows")
# Correct any incorrect case usage in CMAKE_BUILD_TYPE
IF (CMAKE_BUILD_TYPE MATCHES "release" OR CMAKE_BUILD_TYPE MATCHES "RELEASE")
SET(CMAKE_BUILD_TYPE "Release")
ELSEIF (CMAKE_BUILD_TYPE MATCHES "minsizerel" OR CMAKE_BUILD_TYPE MATCHES "MINSIZEREL")
SET(CMAKE_BUILD_TYPE "MinSizeRel")
ELSEIF (CMAKE_BUILD_TYPE MATCHES "relwithdebinfo" OR CMAKE_BUILD_TYPE MATCHES "RELWITHDEBINFO")
SET(CMAKE_BUILD_TYPE "RelWithDebInfo")
ELSEIF (CMAKE_BUILD_TYPE MATCHES "debug" OR CMAKE_BUILD_TYPE MATCHES "DEBUG")
SET(CMAKE_BUILD_TYPE "Debug")
ENDIF()
# Set the build postfix extension according to what configuration is being built.
IF (CMAKE_BUILD_TYPE MATCHES "Release")
SET(CMAKE_BUILD_POSTFIX "${CMAKE_RELEASE_POSTFIX}")
ELSEIF (CMAKE_BUILD_TYPE MATCHES "MinSizeRel")
SET(CMAKE_BUILD_POSTFIX "${CMAKE_MINSIZEREL_POSTFIX}")
ELSEIF(CMAKE_BUILD_TYPE MATCHES "RelWithDebInfo")
SET(CMAKE_BUILD_POSTFIX "${CMAKE_RELWITHDEBINFO_POSTFIX}")
ELSEIF(CMAKE_BUILD_TYPE MATCHES "Debug")
SET(CMAKE_BUILD_POSTFIX "${CMAKE_DEBUG_POSTFIX}")
ELSE()
SET(CMAKE_BUILD_POSTFIX "")
ENDIF()
# Set OSG_INSTALL_LIBDIR to specify the installation directories of object code libraries
IF(DEFINED LIB_POSTFIX)
# Use LIB_POSTFIX if defined
SET(OSG_INSTALL_LIBDIR lib${LIB_POSTFIX})
ELSE()
IF(CMAKE_VERSION VERSION_LESS "2.8.5")
IF(UNIX AND NOT WIN32 AND NOT APPLE)
IF(CMAKE_SIZEOF_VOID_P MATCHES "8")
SET(LIB_POSTFIX "64" CACHE STRING "suffix for 32/64 dir placement")
MARK_AS_ADVANCED(LIB_POSTFIX)
ENDIF()
ENDIF()
IF(NOT DEFINED LIB_POSTFIX)
SET(LIB_POSTFIX "")
ENDIF()
SET(OSG_INSTALL_LIBDIR lib${LIB_POSTFIX})
ELSE()
# Use the GNU standard installation directories for CMake >= 2.8.5
INCLUDE(GNUInstallDirs)
SET(OSG_INSTALL_LIBDIR ${CMAKE_INSTALL_LIBDIR})
ENDIF()
ENDIF()
IF(NOT DEFINED LIB_POSTFIX)
SET(LIB_POSTFIX "")
ENDIF()
# Here we apparently do some funky stuff with making the bin/ and lib/
# folders which is probably needed to work around a very old CMake bug?
#plugins version
set(osgcore_version c3.6.5)
set(osgplugins_version ${osgcore_version}.p1)
set(osgplugins_builddir osgplugins-${osgplugins_version})
set(project_user_outputdir D:/osg365vs2015x64/osgPlugins/${osgplugins_builddir})
SET(OUTPUT_BINDIR ${project_user_outputdir}/bin)
MAKE_DIRECTORY(${OUTPUT_BINDIR})
IF(MSVC AND NOT MSVC_IDE)
MAKE_DIRECTORY(${OUTPUT_BINDIR}/${OSG_PLUGINS})
ENDIF(MSVC AND NOT MSVC_IDE)
SET(OUTPUT_LIBDIR ${project_user_outputdir}/lib)
MAKE_DIRECTORY(${OUTPUT_LIBDIR})
IF(NOT MSVC OR MSVC_IDE)
MAKE_DIRECTORY(${OUTPUT_LIBDIR}/${OSG_PLUGINS})
ENDIF(NOT MSVC OR MSVC_IDE)
SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${OUTPUT_LIBDIR})
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${OUTPUT_BINDIR})
IF(WIN32)
SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${OUTPUT_BINDIR})
ELSE(WIN32)
SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${OUTPUT_LIBDIR})
ENDIF(WIN32)
################################################################################
#macro
#
macro(SETUP_PLUGIN plugin_name)
set(target_targetname ${plugin_name})
add_library(${target_targetname} MODULE ${TARGET_SRC} ${TARGET_H})
endmacro(SETUP_PLUGIN)
# Macro used for adding plugins below. By default, all plugins are built
macro(ADD_PLUGIN_DIRECTORY DIRECTORY)
ADD_SUBDIRECTORY("${osgplugins_source_dir}/${DIRECTORY}")
endmacro()
################################################################################
#current project
#
cmake_minimum_required(VERSION 3.5.0 FATAL_ERROR)
project(osgplugins)
# osgplugins source directory
set(osgplugins_source_dir "../src/osgPlugins")
#osgcore
include_directories(osgcore/include)
link_directories(osgcore/lib)
set( osgcorelibs
OpenThreads_d.lib
osg_d.lib
osgDB_d.lib
osgFX_d.lib
osgGA_d.lib
osgUtil_d.lib
osgSim_d.lib
)
FOREACH(var ${osgcorelibs})
link_libraries(${var})
ENDFOREACH()
#another format
#link_libraries(osg_d.lib osgDB_d.lib osgFX_d.lib osgGA_d.lib osgUtil_d.lib osgSim_d.lib)
############################################################
#
# NodeKit/Psudo loader plugins
#
ADD_PLUGIN_DIRECTORY(osga)
ADD_PLUGIN_DIRECTORY(rot)
ADD_PLUGIN_DIRECTORY(scale)
#其他的插件可以自己加,例如:ADD_PLUGIN_DIRECTORY(要加入的插件目标名称)
链接