如何区分Debug、Release动态库:Cocos2dx CMake在win32下报错:"BULLET_INCLUDE_DIR-NOTFOUND"

368 阅读1分钟

这个问题只有在win32平台下才有

  • frameworks\cocos2d-x\cmake\Modules\CocosUsePrebuiltLibs.cmake
# prebuild模块
set(all_prebuilt_libs
    chipmunk curl freetype2 jpeg png  
    tiff webp websockets openssl bullet
)
# 查找的目录
set(lib_dir_candidates
    ${_root}/prebuilt/${PLATFORM_FOLDER}/${ANDROID_ABI}
    ${_root}/prebuilt/${PLATFORM_FOLDER}/${ARCH_DIR}
    ${_root}/prebuilt/${PLATFORM_FOLDER}
    # 注意这里的release-lib, 其实只有chipmunk有
    ${_root}/prebuilt/${PLATFORM_FOLDER}/release-lib
    ${_root}/prebuilt/${ARCH_DIR}
    ${_root}/libraries/${PLATFORM_FOLDER}
    ${_root}/prebuilt
)
# 中间的逻辑是收集所有的lib路径

# 如果找到了设置对应的变量${_prefix}_LIBRARIES
if(libs)
    set(${_prefix}_LIBRARIES ${libs} CACHE STRING "Libraries to link for ${_prefix}" FORCE)
endif()
  • chipmunk:cocos2d-x\external\chipmunk\prebuilt\win10\win32\chipmunk.lib
  • chipmunk:cocos2d-x\external\chipmunk\prebuilt\win32\release-lib\chipmunk.lib image.png
  • curl: cocos2d-x\external\curl\prebuilt\win32\libcurl.lib
  • freetype2: cocos2d-x\external\freetype2\prebuilt\win32\freetype.lib
  • jpeg: cocos2d-x\external\jpeg\prebuilt\win32\libjpeg.lib
  • png: cocos2d-x\external\png\prebuilt\win32\libpng.lib
  • tiff: cocos2d-x\external\tiff\prebuilt\win32\libtiff.lib
  • webp: cocos2d-x\external\webp\prebuilt\win32\libwebp.lib
  • websockets: cocos2d-x\external\websockets\prebuilt\win32\websockets.lib
  • openssl: cocos2d-x\external\openssl\prebuilt\win32\libssl.lib
  • bullet: cocos2d-x\external\bullet\prebuilt\win32\debug\libbullet.lib

问题就出在bullet的debug目录

image.png

查找目录的确是没有相关的目录的,很不幸在官方仓库也是这么组织目录的

一个很细的逻辑:

里面有一段这样的逻辑,其实我发现没有任何用,_bullet_libs的设置是无效的,不太清楚为啥这么写

# sequence is important
set(_bullet_libs BulletDynamics libBulletDynamics BulletCollision libBulletCollision BulletMultiThreaded libBulletMultiThreaded LinearMath libLinearMath MiniCL libMiniCL)

临时解决办法

增加lib_dir_candidates的目录,显然,没有考虑到debug、release模式,但是chipmunk也存在这个问题

${_root}/prebuilt/${PLATFORM_FOLDER}/release

特殊情况:zlib

有2个查找路径,zlib是在specific里面

set(roots
    ${COCOS_EXTERNAL_DIR}/${_lib}
    ${COCOS_EXTERNAL_DIR}/${PLATFORM_FOLDER}-specific/${_lib}
)

image.png image.png