Cocos2dx v3.8.1避免重复编译
Platform: Android or Windows
Windows平台
- Visual Studio 2013
引用地址: http://blog.csdn.net/u014335219/article/details/50492088
Cocos2dx新建一个工程就会重新编译,而且在VS中,release模式下即便一些库文件未做任何修改(例如libbox2d.lib, libSpine.lib等,也就是库文件的源码未做任何改动),在这个模式下也会重新编译,导致十几分钟的编译时间,debug模式情况却不会对未做修改的库进行再次编译, 下面先介绍VS2013下release模式下的情况,debug模式下和release模式几乎一样,这样做也可以减少新建工程时的第一次编译时间
新建一个工程
cocos new cpp-cocosbuilt -p com.cocos.built -l cpp -d .
新建cpp-cocosbuilt项目后,用VS2013打开proj.win32/cpp-cocosbuilt.sln, 因为release模式会出现这种情况,所以我们将VS2013调到这种模式,如下图所示:
然后ctrl + F5,直接编译和运行,第一遍运行肯定就会是下图这样的
生成预编译库
使用Cocos2dx console控制台命令,选项可通过cocos gen-libs -h查看
cocos gen-libs -p win32 -m release --vs2013
这是产生预编译库的命令,可以产生Android或Win32等平台的预编译库,避免重复编译,执行后,会在cocos引擎上级目录产生一个prebuilt文件夹,我的编译的库目录如下图所示:
移除项目引用
右键项目-属性-通用属性-引用,如下图,移除椭圆2中库的所有引用
移除解决方案引用
接着右键解决方案-属性-通用属性-项目依赖项,将右边库前面的复选框全部取消选中,如下图所示
注意:如果出现如下图所示的不能移除问题,是你没有做前一步移除引用操作,请返回3步骤
配置环境
添加库目录,并设置libcocos2d_2013.dll的环境变量, 如下图所示, 这个目录就是上面的预编译库的目录
然后添加libcocos2d_2013.lib库
接下来是设置dll环境变量,把该变量添加到Path中.
然后就可以ctrl + F5,就可以成功运行啦!
debug模式
同样在cpp-cocosbuilt项目下测试,生成预编译库
cocos gen-libs -p win32 -m debug --vs2013
PS: 使用-c选项会清除$(COCOS_ROOT)/prebuilt目录所有文件,重新生成预编译库. 其他步骤同Release模式,区别只在于,debug模式,附加依赖项多了libbox2d.lib以及libSpine.lib,同时需要修改prebuilt/win32目录下libbox2d_2013.lib以及libSpine_2013.lib,修改为libbox2d.lib及libSpine.lib
建议:debug模式不采用上面步骤,release模式使用上面步骤,原因是如果同时存在debug模式以及Release模式的dll,配置环境变量会产生冲突,而且debug模式在程序运行时也只需编译一遍,只会增加第一次编译时间
Android平台
- Android Studio
修改proj.android-studio/app/jni目录下的Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# 注释掉之前的模块路径
#$(call import-add-path,$(LOCAL_PATH)/../../../cocos2d)
#$(call import-add-path,$(LOCAL_PATH)/../../../cocos2d/external)
#$(call import-add-path,$(LOCAL_PATH)/../../../cocos2d/cocos)
# 添加下面的新模块路径
$(call import-add-path,$(COCOS_ROOT))
LOCAL_MODULE := cocos2dcpp_shared
LOCAL_MODULE_FILENAME := libcocos2dcpp
LOCAL_SRC_FILES := hellocpp/main.cpp \
../../../Classes/AppDelegate.cpp \
../../../Classes/HelloWorldScene.cpp
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../../Classes
LOCAL_C_INCLUDES += $(COCOS_ROOT)/cocos
# _COCOS_HEADER_ANDROID_BEGIN
# _COCOS_HEADER_ANDROID_END
LOCAL_STATIC_LIBRARIES := cocos2dx_static
# _COCOS_LIB_ANDROID_BEGIN
# _COCOS_LIB_ANDROID_END
include $(BUILD_SHARED_LIBRARY)
# 注释掉之前的模块路径
#$(call import-module,.)
# 添加下面的新模块路径
$(call import-module, prebuilt/android)
# _COCOS_LIB_IMPORT_ANDROID_BEGIN
# _COCOS_LIB_IMPORT_ANDROID_END
以后新建项目只要修改新工程的jni/Android.mk文件就行了,接下来我们在$(COCOS_ROOT)/prebuilt/android目录下新建一个Android.mk文件
### COCOS 预编译静态库,确保环境变量有COCOS_ROOT或者项目里有
# 文件位置 $(COCOS_ROOT)/prebuild/android
LOCAL_PATH := $(call my-dir)
#$(call import-add-path,$(COCOS_ROOT))
$(call import-add-path,$(COCOS_ROOT)/external)
$(call import-add-path,$(COCOS_ROOT)/cocos)
#==============================================================
include $(CLEAR_VARS)
LOCAL_MODULE := cocos2dx_static
LOCAL_MODULE_FILENAME := libcocos2d
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libcocos2d.a
LOCAL_EXPORT_C_INCLUDES := \
$(COCOS_ROOT)/cocos \
$(COCOS_ROOT)/cocos/platform/android
LOCAL_STATIC_LIBRARIES := cocostudio_static
LOCAL_STATIC_LIBRARIES += cocosbuilder_static
LOCAL_STATIC_LIBRARIES += cocos3d_static
LOCAL_STATIC_LIBRARIES += spine_static
LOCAL_STATIC_LIBRARIES += cocos_network_static
LOCAL_STATIC_LIBRARIES += audioengine_static
include $(PREBUILT_STATIC_LIBRARY)
#include $(BUILD_STATIC_LIBRARY)
#==============================================================
include $(CLEAR_VARS)
LOCAL_MODULE := cocos_ui_static
LOCAL_MODULE_FILENAME := libui
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libui.a
LOCAL_EXPORT_C_INCLUDES := \
$(COCOS_ROOT)/cocos/ui \
$(COCOS_ROOT)/cocos/editor-support
LOCAL_C_INCLUDES := \
$(COCOS_ROOT)/cocos/ui \
$(COCOS_ROOT)/cocos/editor-support
LOCAL_STATIC_LIBRARIES := cocos_extension_static
include $(PREBUILT_STATIC_LIBRARY)
#==============================================================
include $(CLEAR_VARS)
LOCAL_MODULE := cocos_flatbuffers_static
LOCAL_MODULE_FILENAME := flatbuffers
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/flatbuffers.a
LOCAL_EXPORT_C_INCLUDES := \
$(COCOS_ROOT)/external
LOCAL_C_INCLUDES := \
$(COCOS_ROOT)/external \
$(COCOS_ROOT)/external/flatbuffers
include $(PREBUILT_STATIC_LIBRARY)
#==============================================================
include $(CLEAR_VARS)
LOCAL_MODULE := cocos_extension_static
LOCAL_MODULE_FILENAME := libextension
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libextension.a
LOCAL_STATIC_LIBRARIES := cocos2dx_internal_static
LOCAL_STATIC_LIBRARIES += cocos_curl_static
LOCAL_STATIC_LIBRARIES += box2d_static
LOCAL_STATIC_LIBRARIES += bullet_static
LOCAL_STATIC_LIBRARIES += cocos_network_static
LOCAL_CXXFLAGS += -fexceptions
LOCAL_C_INCLUDES := \
$(COCOS_ROOT) \
$(COCOS_ROOT)/extensions
LOCAL_EXPORT_C_INCLUDES := \
$(COCOS_ROOT) \
$(COCOS_ROOT)/extensions \
$(COCOS_ROOT)/extensions/GUI/CCControlExtension \
$(COCOS_ROOT)/extensions/GUI/CCScrollView \
$(COCOS_ROOT)/cocos/network
include $(PREBUILT_STATIC_LIBRARY)
#==============================================================
include $(CLEAR_VARS)
LOCAL_MODULE := cocos2dx_internal_static
LOCAL_MODULE_FILENAME := libcocos2dxinternal
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libcocos2dxinternal.a
LOCAL_EXPORT_C_INCLUDES := \
$(COCOS_ROOT)/cocos \
$(COCOS_ROOT) \
$(COCOS_ROOT)/cocos/platform \
$(COCOS_ROOT)/cocos/base \
$(COCOS_ROOT)/external \
$(COCOS_ROOT)/external/tinyxml2 \
$(COCOS_ROOT)/external/unzip \
$(COCOS_ROOT)/external/chipmunk/include/chipmunk \
$(COCOS_ROOT)/external/xxhash \
$(COCOS_ROOT)/external/nslog \
$(COCOS_ROOT)/external/poly2tri \
$(COCOS_ROOT)/external/poly2tri/common \
$(COCOS_ROOT)/external/poly2tri/sweep \
$(COCOS_ROOT)/external/clipper
LOCAL_C_INCLUDES := \
$(COCOS_ROOT)/cocos/platform \
$(COCOS_ROOT)/external \
$(COCOS_ROOT)/external/tinyxml2 \
$(COCOS_ROOT)/external/unzip \
$(COCOS_ROOT)/external/chipmunk/include/chipmunk \
$(COCOS_ROOT)/external/edtaa3func \
$(COCOS_ROOT)/external/xxhash \
$(COCOS_ROOT)/external/ConvertUTF \
$(COCOS_ROOT)/external/nslog \
$(COCOS_ROOT)/external/poly2tri \
$(COCOS_ROOT)/external/poly2tri/common \
$(COCOS_ROOT)/external/poly2tri/sweep \
$(COCOS_ROOT)/external/clipper
LOCAL_EXPORT_LDLIBS := -lGLESv2 -llog -landroid
LOCAL_STATIC_LIBRARIES := cocos_freetype2_static
LOCAL_STATIC_LIBRARIES += cocos_png_static
LOCAL_STATIC_LIBRARIES += cocos_jpeg_static
LOCAL_STATIC_LIBRARIES += cocos_tiff_static
LOCAL_STATIC_LIBRARIES += cocos_webp_static
LOCAL_STATIC_LIBRARIES += cocos_chipmunk_static
LOCAL_STATIC_LIBRARIES += cocos_zlib_static
LOCAL_STATIC_LIBRARIES += recast_static
LOCAL_STATIC_LIBRARIES += bullet_static
LOCAL_WHOLE_STATIC_LIBRARIES := cocos2dxandroid_static
# define the macro to compile through support/zip_support/ioapi.c
LOCAL_CFLAGS := -DUSE_FILE32API
LOCAL_CFLAGS += -fexceptions
LOCAL_CPPFLAGS := -Wno-deprecated-declarations -Wno-extern-c-compat
LOCAL_EXPORT_CFLAGS := -DUSE_FILE32API
LOCAL_EXPORT_CPPFLAGS := -Wno-deprecated-declarations -Wno-extern-c-compat
include $(PREBUILT_STATIC_LIBRARY)
#==============================================================
include $(CLEAR_VARS)
LOCAL_MODULE := cocostudio_static
LOCAL_MODULE_FILENAME := libcocostudio
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libcocostudio.a
LOCAL_EXPORT_C_INCLUDES := \
$(COCOS_ROOT)/cocos/editor-support \
$(COCOS_ROOT)/cocos/editor-support/cocostudio
LOCAL_C_INCLUDES := \
$(COCOS_ROOT)/cocos/editor-support \
$(COCOS_ROOT)/cocos/editor-support/cocostudio \
$(COCOS_ROOT)/cocos/editor-support/cocostudio/WidgetReader \
$(COCOS_ROOT)/cocos/editor-support/cocostudio/ActionTimeline \
LOCAL_STATIC_LIBRARIES := cocos_ui_static
LOCAL_STATIC_LIBRARIES += cocosdenshion_static
LOCAL_STATIC_LIBRARIES += cocos_flatbuffers_static
include $(PREBUILT_STATIC_LIBRARY)
#==============================================================
include $(CLEAR_VARS)
LOCAL_MODULE := cocosbuilder_static
LOCAL_MODULE_FILENAME := libcocosbuilder
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libcocosbuilder.a
LOCAL_EXPORT_C_INCLUDES := \
$(COCOS_ROOT)/cocos/editor-support
LOCAL_C_INCLUDES := \
$(COCOS_ROOT)/cocos/editor-support \
$(COCOS_ROOT)/cocos/2d \
LOCAL_STATIC_LIBRARIES := cocos_extension_static
include $(PREBUILT_STATIC_LIBRARY)
#==============================================================
include $(CLEAR_VARS)
LOCAL_MODULE := spine_static
LOCAL_MODULE_FILENAME := libspine
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libspine.a
LOCAL_EXPORT_C_INCLUDES := \
$(COCOS_ROOT)/cocos/editor-support
LOCAL_C_INCLUDES := \
$(COCOS_ROOT)/cocos/editor-support
LOCAL_STATIC_LIBRARIES := cocos2dx_internal_static
include $(PREBUILT_STATIC_LIBRARY)
#==============================================================
include $(CLEAR_VARS)
LOCAL_MODULE := cocos3d_static
LOCAL_MODULE_FILENAME := libcocos3d
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libcocos3d.a
LOCAL_EXPORT_C_INCLUDES := \
$(COCOS_ROOT)/cocos
LOCAL_C_INCLUDES := \
$(COCOS_ROOT)/cocos
LOCAL_STATIC_LIBRARIES := cocos2dx_internal_static
include $(PREBUILT_STATIC_LIBRARY)
#==============================================================
include $(CLEAR_VARS)
LOCAL_MODULE := box2d_static
LOCAL_MODULE_FILENAME := libbox2d
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libbox2d.a
LOCAL_EXPORT_C_INCLUDES := $(COCOS_ROOT)/external
LOCAL_C_INCLUDES := $(COCOS_ROOT)/external \
$(COCOS_ROOT)/external/Box2D
include $(PREBUILT_STATIC_LIBRARY)
#==============================================================
include $(CLEAR_VARS)
LOCAL_MODULE := recast_static
LOCAL_MODULE_FILENAME := librecast
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/librecast.a
LOCAL_EXPORT_C_INCLUDES := \
$(COCOS_ROOT)/external
LOCAL_C_INCLUDES := \
$(COCOS_ROOT)/external
include $(PREBUILT_STATIC_LIBRARY)
#==============================================================
include $(CLEAR_VARS)
LOCAL_MODULE := bullet_static
LOCAL_MODULE_FILENAME := libbullet
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libbullet.a
LOCAL_EXPORT_C_INCLUDES := \
$(COCOS_ROOT)/external
LOCAL_C_INCLUDES := \
$(COCOS_ROOT)/external
include $(PREBUILT_STATIC_LIBRARY)
#==============================================================
include $(CLEAR_VARS)
LOCAL_MODULE := cocos_network_static
LOCAL_MODULE_FILENAME := libnetwork
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libnetwork.a
LOCAL_EXPORT_C_INCLUDES :=
LOCAL_C_INCLUDES := \
$(COCOS_ROOT)/external/curl/include/android \
$(COCOS_ROOT)/external/websockets/include/android
LOCAL_STATIC_LIBRARIES := cocos2dx_internal_static
LOCAL_STATIC_LIBRARIES += cocos_curl_static
LOCAL_STATIC_LIBRARIES += libwebsockets_static
include $(PREBUILT_STATIC_LIBRARY)
#==============================================================
include $(CLEAR_VARS)
LOCAL_MODULE := cocos2dxandroid_static
LOCAL_MODULE_FILENAME := libcocos2dandroid
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libcocos2dandroid.a
LOCAL_EXPORT_C_INCLUDES := \
$(COCOS_ROOT)/cocos/platform/android \
LOCAL_C_INCLUDES := \
$(COCOS_ROOT)/cocos/platform/android \
$(COCOS_ROOT)/cocos/platform \
$(COCOS_ROOT)/cocos
LOCAL_EXPORT_LDLIBS := -lGLESv1_CM \
-lGLESv2 \
-lEGL \
-llog \
-landroid
LOCAL_CPPFLAGS := -Wno-extern-c-compat
LOCAL_EXPORT_CPPFLAGS := -Wno-extern-c-compat
include $(PREBUILT_STATIC_LIBRARY)
#========AudioEngine库加入失败因为本身存在编译警告========
#New AudioEngine
#include $(CLEAR_VARS)
#LOCAL_MODULE := audioengine_static
#LOCAL_MODULE_FILENAME := libaudioengine
#LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libaudioengine.a
#LOCAL_EXPORT_C_INCLUDES := $(COCOS_ROOT)/cocos/audio/include
#LOCAL_EXPORT_LDLIBS := -lOpenSLES
#LOCAL_C_INCLUDES := $(COCOS_ROOT)/cocos/audio/include \
$(COCOS_ROOT)/cocos \
$(COCOS_ROOT)/cocos/audio/platform/android
#include $(PREBUILT_STATIC_LIBRARY)
#SimpleAudioEngine
#include $(CLEAR_VARS)
#LOCAL_MODULE := cocosdenshion_static
#LOCAL_MODULE_FILENAME := libcocosdenshion
#LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libcocosdenshion.a
#LOCAL_STATIC_LIBRARIES := audioengine_static
#LOCAL_EXPORT_C_INCLUDES := $(COCOS_ROOT)/cocos/audio/include
#LOCAL_C_INCLUDES := $(COCOS_ROOT)/cocos/audio/include \
$(COCOS_ROOT)/cocos \
$(COCOS_ROOT)/cocos/audio/platform/android
#include $(PREBUILT_STATIC_LIBRARY)
#==============================================================
##以下是cocos编译好的静态库
#==============================================================
$(call import-module,freetype2/prebuilt/android)
$(call import-module,png/prebuilt/android)
$(call import-module,zlib/prebuilt/android)
$(call import-module,jpeg/prebuilt/android)
$(call import-module,tiff/prebuilt/android)
$(call import-module,webp/prebuilt/android)
$(call import-module,chipmunk/prebuilt/android)
$(call import-module,curl/prebuilt/android)
$(call import-module,websockets/prebuilt/android)
#==============================================================
#AudioEngine在这里加入编译
$(call import-module,audio/android)
然后就可以在命令行下编译了
cocos compile -p android --android-studio