Visual studio 无法使用CMAKE for Visual Studio编译COLLADA
嗨,我正在尝试建立Collada插件 每次它到达(FindCOLLADA.cmake)文件时,它都会在cmake中冻结,并且不会前进。 我可以在另一台台式机上重新创建,但在我的笔记本电脑上。。它运行良好。 所以这是一个奇怪的错误,因为它不挂在笔记本电脑上,但在我的2台台式机上,它挂在这个阶段,不会继续 如果我不添加COLLADA插件。。它很好地完成了这个项目。 所以我很确定我把它和这个隔离了 将一些状态消息放入我可以看到它挂在这行上:Visual studio 无法使用CMAKE for Visual Studio编译COLLADA,visual-studio,cmake,collada,Visual Studio,Cmake,Collada,嗨,我正在尝试建立Collada插件 每次它到达(FindCOLLADA.cmake)文件时,它都会在cmake中冻结,并且不会前进。 我可以在另一台台式机上重新创建,但在我的笔记本电脑上。。它运行良好。 所以这是一个奇怪的错误,因为它不挂在笔记本电脑上,但在我的2台台式机上,它挂在这个阶段,不会继续 如果我不添加COLLADA插件。。它很好地完成了这个项目。 所以我很确定我把它和这个隔离了 将一些状态消息放入我可以看到它挂在这行上: # Locate the actual library FI
# Locate the actual library
FIND_RELEASE_AND_DEBUG(COLLADA NAMES ${COLLADADOM_NAMES} DEFAULT_SUFFIXES
PATHS ${Collada_library_paths} ${COLLADA_generic_lib_path})
这是整个FindCOLLADA.cmake文件
# - Find COLLADA
# This module searches for the COLLADA library, by default using version 1.4
# of the COLLADA DOM Schema.
#
# The module defines the following variables:
# COLLADA_INCLUDE_DIRS - where to find dae.h, etc.
# COLLADA_LIBRARIES - the libraries needed to use COLLADA.
# COLLADA_DEFINITIONS - preprocessor definitions to use with COLLADA.
# COLLADA_NAMESPACE - boolean to indicate whether this version contains the
# namespaces and new functions introduced with
# COLLADA-DOM 2.4.
# COLLADA_NAMESPACE_141 - boolean to indicate wheter the namespace
# ColladaDOM141 is supported.
# COLLADA_NAMESPACE_150 - boolean to indicate wheter the namespace
# ColladaDOM150 is supported.
# COLLADA_FOUND - if false, do not try to use COLLADA.
#
# Variables used by this module, they can change the default behavior and need
# to be set before calling find_package:
#
# COLLADADOM_15 - if set to a value which evaluates to true, the module
# will look for the COLLADA DOM Scheva version 1.5
# components instead of the default (1.4.)
# COLLADA_ROOT_DIR - The prefered installation prefix for searching for
# COLLADA. This corresponds to
# ./configure --prefix=$COLLADA_ROOT_DIR
# Set if this module has problems finding the proper
# COLLADA instalation.
#
# ============================================================================
# Originally created by Robert Osfield. [OpenSceneGraph]
# ============================================================================
# Standarnd issue macros
include (FindPackageHandleStandardArgs)
include (FindPackageMessage)
include (FindReleaseAndDebug)
include (CheckCXXSourceCompiles)
if (COLLADA_15)
set (COLLADADOM_VERSION "15")
set (COLLADADOM_VERSION_PT "1.5")
else()
set (COLLADADOM_VERSION "14")
set (COLLADADOM_VERSION_PT "1.4")
endif()
set(COLLADA_VERSIONS "2.5" 25 "2.4" 24 23 22 21 20 2)
MESSAGE( STATUS "COLLADADOM_VERSION: " ${COLLADADOM_VERSION} )
MESSAGE( STATUS "COLLADADOM_VERSION_PT: " ${COLLADADOM_VERSION_PT} )
MESSAGE( STATUS "COLLADA_VERSIONS: " ${COLLADA_VERSIONS} )
#set (COLLADA_VERSIONS "2.4")
#set (COLLADA_LIBRARY
# optimized
# C:/CODE/mitsuba_12/dependencies/lib/x64/collada-dom2.4-dp-vc110-mt.lib
# debug
# C:/CODE/mitsuba_12/dependencies/lib/x64/collada-dom2.4-dp-vc110-mt_debug.lib
# )
# Default search paths
set (COLLADA_generic_include_path
~/Library/Frameworks
/Library/Frameworks
/opt/local/Library/Frameworks #macports
/usr/local/include
/usr/local/include/colladadom
/usr/include/
/usr/include/colladadom
/sw/include # Fink
/opt/local/include # DarwinPorts
/opt/csw/include # Blastwave
/opt/include
/usr/freeware/include
#/collada-dom
#/collada-dom/1.4
#collada-dom
#collada-dom/1.4
#${MTS_DEPS_DIR}/include/collada-dom
#${MTS_DEPS_DIR}/include/collada-dom/1.4
)
set (COLLADA_generic_lib_path
#/lib/x64
#lib/x64
#${MTS_DEPS_DIR}/lib/x64
)
# Macro to assemble a helper state variable
macro (SET_STATE_VAR varname)
set (tmp_lst ColladaDOM | ${COLLADA_INCLUDE_DIR} | ${COLLADA_LIBRARY})
set (${varname} "${tmp_lst}")
unset (tmp_lst)
endmacro ()
# Macro to search for an include directory
macro (PREFIX_FIND_INCLUDE_DIR prefix includefile libpath_var)
string (TOUPPER ${prefix}_INCLUDE_DIR tmp_varname)
find_path(${tmp_varname} ${includefile}
HINTS ${${libpath_var}}
PATHS ${COLLADA_generic_include_path}
PATH_SUFFIXES
"collada-dom2.4" "collada_dom2.4"
"include/collada-dom2.4" "include/collada_dom2.4"
"collada-dom" "collada_dom" "include"
"include/collada-dom" "include/collada_dom"
)
if (${tmp_varname})
mark_as_advanced (${tmp_varname})
endif ()
unset (tmp_varname)
endmacro ()
# Macro to test for namespace support. Factorized just to keep the code cleaner
macro (COLLADA_CHECK_NAMESPACE)
# COLLADA-DOM 2.4 needs special treatment
set(_COLLADA_OLD_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS})
set(_COLLADA_OLD_INCLUDES ${CMAKE_REQUIRED_INCLUDES})
set(_COLLADA_OLD_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
# Flags for the test source:
# (1 << 0) - COLLADA-DOM 1.4.1
# (1 << 1) - COLLADA-DOM 1.5.0
set(_COLLADA_TEST_SRC "
#define NO_BOOST
#ifdef COLLADA_DOM_SUPPORT150
# undef COLLADA_DOM_SUPPORT150
#endif
#ifdef COLLADA_DOM_SUPPORT141
# undef COLLADA_DOM_SUPPORT141
#endif
#ifdef COLLADA_DOM_NAMESPACE
# undef COLLADA_DOM_NAMESPACE
#endif
#ifndef COLLADA_FLAGS
# define COLLADA_FLAGS 0
#endif
#define COLLADA_DOM_NAMESPACE
#if (COLLADA_FLAGS & (1 << 0)) != 0
# define COLLADA_DOM_SUPPORT141
#endif
#if (COLLADA_FLAGS & (1 << 1)) != 0
# define COLLADA_DOM_SUPPORT150
#endif
#include <dae.h>
int main(int argc, char** argv) {
DAE dae;
int result = 0;
#ifdef COLLADA_DOM_SUPPORT141
ColladaDOM141::domCOLLADA* root1 = dae.getRoot141(argv[0]);
result += ((int*)root1)[argc];
#endif
#ifdef COLLADA_DOM_SUPPORT150
ColladaDOM150::domCOLLADA* root2 = dae.getRoot150(argv[0]);
result += ((int*)root2)[argc];
#endif
return result;
}
")
# Run the tests
set(CMAKE_REQUIRED_INCLUDES ${COLLADA_INCLUDE_DIRS})
set(CMAKE_REQUIRED_LIBRARIES ${COLLADA_LIBRARIES})
set(CMAKE_REQUIRED_DEFINITIONS "-DCOLLADA_FLAGS=3")
CHECK_CXX_SOURCE_COMPILES("${_COLLADA_TEST_SRC}" HAVE_COLLADA_DOM_141_150)
# Perhaps it was compiled with only one of the namespaces
if (NOT HAVE_COLLADA_DOM_141_150)
set(CMAKE_REQUIRED_DEFINITIONS "-DCOLLADA_FLAGS=1")
CHECK_CXX_SOURCE_COMPILES("${_COLLADA_TEST_SRC}" HAVE_COLLADA_DOM_141)
set(CMAKE_REQUIRED_DEFINITIONS "-DCOLLADA_FLAGS=2")
CHECK_CXX_SOURCE_COMPILES("${_COLLADA_TEST_SRC}" HAVE_COLLADA_DOM_150)
endif()
set(CMAKE_REQUIRED_DEFINITIONS ${_COLLADA_OLD_DEFINITIONS})
set(CMAKE_REQUIRED_INCLUDES ${_COLLADA_OLD_INCLUDES})
set(CMAKE_REQUIRED_LIBRARIES ${_COLLADA_OLD_LIBRARIES})
unset(_COLLADA_TEST_SRC)
unset(_COLLADA_OLD_INCLUDES)
unset(_COLLADA_OLD_LIBRARIES)
endmacro()
# Encode the current state of the external variables into a string
SET_STATE_VAR (COLLADA_CURRENT_STATE)
# If the state has changed, clear the cached variables
if (COLLADA_CACHED_STATE AND
NOT COLLADA_CACHED_STATE STREQUAL COLLADA_CURRENT_STATE)
foreach (libvar ${COLLADA_CACHED_VARS})
unset (${libvar} CACHE)
endforeach ()
endif ()
# Where to look for the libraries
if(APPLE)
set(COLLADA_BUILDNAME "mac")
elseif(MINGW)
set(COLLADA_BUILDNAME "mingw")
elseif(MSVC)
math(EXPR COLLADA_BUILDNAME "(${MSVC_VERSION} - 600) / 100")
set(COLLADA_BUILDNAME "vc${COLLADA_BUILDNAME}")
endif()
set(Collada_library_paths
${COLLADA_ROOT_DIR}
${COLLADA_ROOT_DIR}/lib
${COLLADA_ROOT_DIR}/lib/x64
${MTS_DEPS_DIR}/lib/x64
${COLLADA_ROOT_DIR}/build/${COLLADA_BUILDNAME}-${COLLADADOM_VERSION_PT}
/build/${COLLADA_BUILDNAME}-${COLLADADOM_VERSION_PT}
)
# Construct the possible names for the DOM library
set(COLLADADOM_NAMES
collada-dom
collada${COLLADADOM_VERSION}dom
Collada${COLLADADOM_VERSION}Dom
)
if (MSVC)
set(COLLADADOM_NAMES ${COLLADADOM_NAMES}
libcollada-dom
libCollada${COLLADADOM_VERSION}Dom
libcollada${COLLADADOM_VERSION}dom
)
endif()
# Version suffixes for MSVC
if (MSVC)
math(EXPR VC_SUFFIX_A "(${MSVC_VERSION} - 600) / 10")
math(EXPR VC_SUFFIX_B "${VC_SUFFIX_A} / 10")
set(VC_SUFFIXES "vc${VC_SUFFIX_A}-mt" "vc${VC_SUFFIX_B}-mt"
"vc${VC_SUFFIX_A}" "vc${VC_SUFFIX_B}")
unset(VC_SUFFIX_A)
unset(VC_SUFFIX_B)
endif()
set(COLLADADOM_NAMES_BASE ${COLLADADOM_NAMES})
foreach(name ${COLLADADOM_NAMES_BASE})
foreach(version ${COLLADA_VERSIONS})
list(APPEND COLLADADOM_NAMES "${name}${version}-dp" "${name}${version}")
if(MSVC)
foreach(vc_suffix ${VC_SUFFIXES})
list(APPEND COLLADADOM_NAMES "${name}${version}-dp-${vc_suffix}"
"${name}${version}-${vc_suffix}")
endforeach()
endif()
endforeach()
endforeach()
unset(COLLADADOM_NAMES_BASE)
unset(VC_SUFFIXES)
# Locate the header files
PREFIX_FIND_INCLUDE_DIR (COLLADA dae.h COLLADA_ROOT_DIR)
MESSAGE( STATUS "COLLADA_ROOT_DIR: " ${COLLADA_ROOT_DIR} )
MESSAGE( STATUS "COLLADA_generic_lib_path: " ${COLLADA_generic_lib_path} )
MESSAGE( STATUS "Collada_library_paths: " ${Collada_library_paths} )
MESSAGE( STATUS "COLLADA_INCLUDE_DIRS: " ${COLLADA_INCLUDE_DIRS} )
# Locate the actual library
FIND_RELEASE_AND_DEBUG(COLLADA NAMES ${COLLADADOM_NAMES} DEFAULT_SUFFIXES
PATHS ${Collada_library_paths} ${COLLADA_generic_lib_path})
# Create the list of variables that might need to be cleared.
# The libraries and include path are not cleared since they might be manually
# set by the user. Besides they will be processed again if the user deletes
# them from the CMake cache. Only the internal cache variables need to be
# specifically cleared so that the tests run again.
set (COLLADA_CACHED_VARS
HAVE_COLLADA_DOM_141_150 HAVE_COLLADA_DOM_141 HAVE_COLLADA_DOM_150
CACHE INTERNAL "Variables set by FindCOLLADA.cmake" FORCE)
# Store the current state so that variables might be cleared if required
set (COLLADA_CACHED_STATE ${COLLADA_CURRENT_STATE}
CACHE INTERNAL "State last seen by FindCOLLADA.cmake" FORCE)
# Use the standard function to handle COLLADA_FOUND
FIND_PACKAGE_HANDLE_STANDARD_ARGS (COLLADA DEFAULT_MSG
COLLADA_INCLUDE_DIR COLLADA_LIBRARY)
# Set the uncached variables for the appropriate version
if (COLLADA_FOUND)
set(COLLADA_INCLUDE_DIRS
${COLLADA_INCLUDE_DIR}
${COLLADA_INCLUDE_DIR}/${COLLADADOM_VERSION_PT})
set(COLLADA_LIBRARIES ${COLLADA_LIBRARY})
# Check if this version of COLLADA-DOM contains namespaces introduced in v2.4
COLLADA_CHECK_NAMESPACE()
# Set the results and definitions
if (HAVE_COLLADA_DOM_141_150 OR HAVE_COLLADA_DOM_141 OR HAVE_COLLADA_DOM_150)
set(COLLADA_NAMESPACE ON)
# TODO Check if double support was actually enabled
set(COLLADA_DEFINITIONS "-DCOLLADA_DOM_NAMESPACE -DCOLLADA_DOM_DAEFLOAT_IS64")
if (HAVE_COLLADA_DOM_141_150 OR HAVE_COLLADA_DOM_141)
set(COLLADA_NAMESPACE_141 ON)
set(COLLADA_DEFINITIONS "${COLLADA_DEFINITIONS} -DCOLLADA_DOM_SUPPORT141")
endif()
if (HAVE_COLLADA_DOM_141_150 OR HAVE_COLLADA_DOM_150)
set(COLLADA_NAMESPACE_150 ON)
set(COLLADA_DEFINITIONS "${COLLADA_DEFINITIONS} -DCOLLADA_DOM_SUPPORT150")
endif()
else()
set(COLLADA_NAMESPACE OFF)
set(COLLADA_NAMESPACE_141 OFF)
set(COLLADA_NAMESPACE_150 OFF)
set(COLLADA_DEFINITIONS "")
endif()
endif()
#-查找COLLADA
#默认情况下,此模块使用1.4版搜索COLLADA库
#COLLADA DOM模式的。
#
#该模块定义了以下变量:
#COLLADA_INCLUDE_DIRS-在哪里可以找到dae.h等。
#COLLADA_库-需要使用COLLADA的库。
#COLLADA_定义-用于COLLADA的预处理器定义。
#COLLADA_NAMESPACE-布尔值,指示此版本是否包含
#使用引入的名称空间和新函数
#COLLADA-dom2.4。
#COLLADA_NAMESPACE_141-布尔值,用于指示名称空间的位置
#支持ColladaDOM141。
#COLLADA_NAMESPACE_150-布尔值,用于指示名称空间的位置
#支持ColladaDOM150。
#发现COLLADA_-如果为false,请不要尝试使用COLLADA。
#
#此模块使用的变量,它们可以更改默认行为和需要
#要在调用find_包之前进行设置:
#
#COLLADADOM_15-如果设置为计算结果为真的值,则模块
#将查找COLLADA DOM Scheva版本1.5
#组件而不是默认组件(1.4.)
#COLLADA_ROOT_DIR-用于搜索的首选安装前缀
#科拉达。这相当于
#./configure--prefix=$COLLADA\u ROOT\u DIR
#如果此模块在查找正确的
#羽衣甘蓝安装。
#
# ============================================================================
#最初由罗伯特·奥斯菲尔德创作。[OpenSceneGraph]
# ============================================================================
#标准问题宏
包括(FindPackageHandleStandardArgs)
包括(FindPackageMessage)
包括(FindReleaseAndebug)
包括(检查CXX资源组件)
如果(COLLADA_15)
套装(衣领版“15”)
套装(衣领版“1.5”)
else()
套装(衣领版“14”)
套装(衣领版“1.4”)
endif()
套装(COLLADA_版本“2.5”25“2.4”24 23 22 20 2)
消息(状态“COLLADADOM_VERSION:${COLLADADOM_VERSION})
消息(状态“COLLADADOM\u VERSION\u PT:${COLLADADOM\u VERSION\u PT})
消息(状态“COLLADA_版本:${COLLADA_版本})
#套装(COLLADA_版本“2.4”)
#集合(COLLADA_库)
#优化
#C:/CODE/mitsuba_12/dependencies/lib/x64/collada-dom2.4-dp-vc110-mt.lib
#调试
#C:/CODE/mitsuba_12/dependencies/lib/x64/collada-dom2.4-dp-vc110-mt_debug.lib
# )
#默认搜索路径
集合(COLLADA\u generic\u include\u路径
~/Library/Frameworks
/图书馆/框架
/选择/本地/库/框架#macports
/usr/本地/包括
/usr/local/include/colladadom
/usr/包括/
/usr/include/COLLADODOM
/sw/包括#Fink
/选择/本地/包含#达尔文端口
/opt/csw/包括#爆炸波
/选择/包括
/usr/免费软件/包括
#/羽衣甘蓝
#/collada dom/1.4
#羽衣甘蓝
#collada dom/1.4
#${MTS_DEPS_DIR}/include/collada dom
#${MTS_DEPS_DIR}/include/collada dom/1.4
)
设置(COLLADA_通用_lib_路径)
#/lib/x64
#lib/x64
#${MTS_DEPS_DIR}/lib/x64
)
#宏来组装帮助器状态变量
宏(SET\u STATE\u VAR varname)
集合(tmp|lst ColladaDOM |${COLLADA_INCLUDE_DIR}|${COLLADA_LIBRARY})
集合(${varname}“${tmp_lst}”)
未设置(tmp_lst)
endmacro()
#宏来搜索包含目录
宏(前缀\u FIND\u INCLUDE\u DIR前缀includefile libpath\u var)
字符串(TOUPPER${prefix}\u INCLUDE\u DIR tmp\u varname)
查找路径(${tmp\u varname}${includefile}
提示${${libpath_var}
路径${COLLADA_generic_include_path}
路径后缀
“collada-dom2.4”“collada_dom2.4”
“include/collada-dom2.4”“include/collada_dom2.4”
“collada dom”“collada_dom”“包括”
“包括/collada dom”“包括/collada_dom”
)
if(${tmp_varname})
标记为高级(${tmp\u varname})
endif()
取消设置(tmp_varname)
endmacro()
#宏来测试命名空间支持。分解只是为了保持代码更干净
宏(COLLADA\u CHECK\u名称空间)
#COLLADA-DOM 2.4需要特殊处理
集合(_COLLADA_OLD_DEFINITIONS${CMAKE_REQUIRED_DEFINITIONS})
集合(_COLLADA_OLD_INCLUDES${CMAKE_REQUIRED_INCLUDES})
集合(_COLLADA_OLD_LIBRARIES${CMAKE_REQUIRED_LIBRARIES})
#测试源的标志:
#(1FIND\u RELEASE\u和\u DEBUG
未内置到CMake中,似乎是从这里来的:include(findRelease和ddebug)
在您的FindColada.cmake
文件的顶部。我的cmake 2.8.9安装没有此模块。您是否尝试过cmake--help module FindReleaseAndebug
以查看是否有任何模块文档可以给您提示?