(原创,转载注明出处:http://www.cnblogs.com/binxindoudou/p/4017975.html )

一、实验背景

cocos2d-x已经发展的相对完善了,从项目的创建、编译、运行到最后的打包都有相应的便捷工具,开发者只需要关注自己的游戏逻辑代码即可,这一点很赞,可是傻瓜式的编程,让我至今还只停留在使用vs建个空项目做个小demo的阶段,我根本不知道cocos2d-x项目究竟是如何组织的,那些项目与项目之间的关系,那些库文件的引用,那些属性的配置,那些路径设置,那些宏定义究竟是在哪里,为什么会出现两个窗口,一大片属性究竟是什么意思,,所以很有必要研究一下。现在把实验过程同大家交流一下,有什么说的片面或不对的地方,欢迎大家提出,一同进步。

二、实验目标

1.使用vs从一个空项目配置成为一个可以运行cocos2d-x官方lua demo的项目。

2.学习vs项目属性配置相关知识。

三、实验条件

Virtual Studio 2013 Update3 、 cocos2d-x-3.2  Jul.17 2014(将其解压在桌面上,安装配置好cocos2d-x)

四、实验步骤与注意事项

1.使用vs在桌面上创建一个win32控制台应用程序的空项目,我这就叫test,按照下图二的目录结构进行创建,其中文件( 包括资源文件)都是从引擎根目录下找到并复制到项目中的,这里的cpps就是所谓的“自己编写的cpp代码”。

 

(1)默认vs的空项目的解决方案和项目名称相同,一个解决方案可以包含多个项目,一个解决方案对应一个程序,test项目默认为核心,其他项目为其服务,生成lib和dll。头文件、源文件、资源文件三个是文件筛选器,相当于逻辑目录,只是便于管理文件,与文件的物理路径无关,我习惯将其对应起来。外部依赖项不由自己控制,包含外部库的头文件。上图三四是我配置完成后的项目,包含cpps(自定义cpp逻辑代码),luas(自定义的lua逻辑代码),res(程序的资源文件)。

(2).sdf是一个数据库文件,编译时自动生成,存放工程信息,与代码提示相关。.sln文件是解决方案文件,保存的是解决方案信息,是一个解决方案中不同项目之间的关系文件。

2.项目-》属性管理器,右键Debug|win32,添加现有属性表,从cocos2d-x引擎根目录(以下称$(EngineRoot))下找到  $(EngineRoot)\cocos\2d\

cocos2d_headers.props和cocos2dx.props两个文件添加。

3.回到解决方案管理器,右键test->属性,c/c++->常规->附加包含目录,添加上如下目录

$(EngineRoot)cocos\scripting\lua-bindings\auto
$(EngineRoot)cocos\scripting\lua-bindings\manual
$(EngineRoot)cocos\audio\include
$(EngineRoot)external\lua\lua
$(EngineRoot)external\lua\tolua
$(EngineRoot)external\chipmunk\include\chipmunk

(1)附加包含目录:其实就是“自己编写的cpp代码”需要查找头文件和原文件的位置。

(2)$(EngineRoot)是在cocos2d_headers.props和cocos2dx.props中定义的

4.预处理器,这一步是定义cocos2dx中类似平台_WINDOWS这样的代码(我说我为什么有的时候不明白这个究竟是从哪定义到的,这里恍然大悟)

懒死,复制吧,嘿嘿

WIN32
_WINDOWS
STRICT
_CRT_SECURE_NO_WARNINGS
_SCL_SECURE_NO_WARNINGS_DEBUG
COCOS2D_DEBUG=

5.附件库目录

$(EngineRoot)external\lua\luajit\include\;$(EngineRoot)external\lua\luasocket\;$(EngineRoot)external\lua\tolua\;$(EngineRoot)external\xxtea\;$(EngineRoot)cocos\scripting\lua-bindings\;$(EngineRoot)external\ConvertUTF\;$(EngineRoot)external\edtaa3func\;$(EngineRoot)external\tinyxml2\;$(EngineRoot)external\unzip\;$(EngineRoot)external\xxhash\;$(EngineRoot)3d\;$(EngineRoot)base\;$(EngineRoot);$(EngineRoot)deprecated\;$(EngineRoot)math\;$(EngineRoot)physics\;$(EngineRoot)platform\;$(EngineRoot)renderer\;$(EngineRoot)2d\;$(EngineRoot)cocos\audio\include\;$(EngineRoot)cocos\audio\win32\;$(EngineRoot)cocos\editor-support\cocosbuilder\;$(EngineRoot)external\json\;$(EngineRoot)external\json\internal\;$(EngineRoot)cocos\editor-support\cocostudioActionTimeline\;$(EngineRoot)cocos\editor-support\;$(EngineRoot)cocos\editor-support\spine\;$(EngineRoot)cocos;etwork\;$(EngineRoot)cocos\storage\local-storage\;$(EngineRoot)cocos\ui\;$(OutDir);%(AdditionalLibraryDirectories)

(1)这个是我从$(EngineRoot)中复制的。

(2)附加库目录->添加第三方库需要查找的目录,这一步之后, 外部依赖项就自动添加了,打开来看会发现里边有好多.h,以后使用#include "*****.h"就无忧了。

6.附加依赖项

(1)附加依赖项,就是所谓的库文件了lib,静态库文件,其实有了他们,就相当于是有了第五步中的.h们对应的.cpp们(我是这么理解的),到时候“写入”(我这不懂,姑且这么叫吧)到exe中。

(2).dll是动态链接库,是在运行时才能加载的,不会被写入最终文件.exe中。所以经常见到绿色软件.exe外部有他们。

7.两个小窗口(这里还在研究中,不知道这里对应那块代码,这样设置就对了)

8.预生成事件

(1)生成事件分为三种,预先生成事件=》编译之前执行的事件;预连接事件=》链接之前的事件;后期生成事件=》编译之后的事件

(2)这里用到的是命令行代码,我主要是复制了一些文件

//预先生成事件
if not exist $(PorjectDir) mkdir $(ProjectDir)
xcopy "$(EngineRoot)cocos\scripting\lua-bindings\script\*.lua" "$(ProjectDir)" /e /y
//预连接事件
if not exist $(OutDir) mkdir $(OutDir)
xcopy "$(EngineRoot)build\$(Configuration).win32\*.lib" "$(OutDir)" /e /y
xcopy "$(EngineRoot)build\$(Configuration).win32\*.dll" "$(OutDir)" /e /y //后期生成事件
if not exist $(OutDir) mkdir $(OutDir)
if not exist $(OutDir)res\ mkdir $(OutDir)res\
if not exist $(OutDir)luas\ mkdir $(OutDir)luas\
xcopy "$(ProjectDir)*.lua" "$(OutDir)" /e /y
xcopy "$(ProjectDir)*.dll" "$(OutDir)" /e /y
xcopy "$(ProjectDir)res\*" "$(OutDir)\res" /e /y
xcopy "$(ProjectDir)luas\*" "$(OutDir)\luas\" /e /y

从根目录复制已经编译好的动态和静态库到这个空项目工程中

(3)$(OutDir) ===》C:\Users\username\Desktop\test1\Debug,最后的生成目录,完成后可以单独拷贝出来运行。

(4)$(Configuration),因Debug版本和Release版本而异

(5)$(PorjectDir),Debug工程目录,调试目录,工作目录

9.可以先编译一次,然后将

在生成中使用设置为否,以免每次都复制这么多文件(如果没有什么变化的话,这一步可以手动进行复制)。

10.看看效果吧

11.完成了。

(原创,转载注明出处:http://www.cnblogs.com/binxindoudou/p/4017975.html )

VS项目属性配置实验过程的更多相关文章

  1. VS IDE 中Visual C++ 中的项目属性配置

    VS IDE 中Visual C++ 中的项目属性配置 一. Visual C++ 项目系统基于 MSBuild. 虽然可以直接在命令行上编辑 XML 项目文件和属性表,我们仍建议你使用 VS IDE ...

  2. Spring Boot项目属性配置

    接着上面的入门教程,我们来学习下Spring Boot的项目属性配置. 1.配置项目内置属性 属性配置主要是在application.properties文件里配置的(编写时有自动提示)这里我们将se ...

  3. SpringBoot 入门:项目属性配置

    开发一个SpringBoot 项目,首当其冲,必然是配置项目 一.项目属性配置 1. SpringBoot自带了Tomcat服务器,通过使用项目配置文件来修改项目的配置,如图配置了部署在80端口,目录 ...

  4. SpringBoot项目属性配置-第二章

    SpringBoot入门 1. 相信很多人选择Spring Boot主要是考虑到它既能兼顾Spring的强大功能,还能实现快速开发的便捷.我们在Spring Boot使用过程中,最直观的感受就是没有了 ...

  5. [02] SpringBoot的项目属性配置

    1.application.properties 简述 配置文件的使用和调整都非常方便,直接在项目默认的classpath下的application.properties文件中做调整即可.例如Spri ...

  6. springboot快速入门(二)——项目属性配置(日志详解)

    一.概述 application.properties就是springboot的属性配置文件 在使用spring boot过程中,可以发现项目中只需要极少的配置就能完成相应的功能,这归功于spring ...

  7. 转载:VS项目属性配置总结

    本文来自:http://www.mamicode.com/info-detail-232474.html       https://www.cnblogs.com/alinh/p/8066820.h ...

  8. VS项目属性配置总结

    以下是针对VS2013下的VC++项目: Debug和Release说明: Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序.Release 称为发布版本,它往往是进 ...

  9. spring boot学习(2) SpringBoot 项目属性配置

    第一节:项目内置属性 application.properties配置整个项目的,相当于以前的web.xml: 注意到上一节的访问HelloWorld时,项目路径也没有加:直接是http://loca ...

随机推荐

  1. js中的潜伏者之Arguments对象

    argument 说明: 在JavaScript中,arguments是对象的一个特殊属性.arguments对象就像数组,但是它却不是数组.可以理解为他是潜伏者,通俗的说,就是你传的参数不一定按照参 ...

  2. bootstrap学习--什么是bootstrap

    2011年,twitter的“一小撮”工程师为了提高他们内部的分析和管理能力,用业余时间为他们的产品构建了一套易用.优雅.灵活.可扩展的前端工具集--BootStrap.Bootstrap由MARK ...

  3. 去除后台ckeditor的style="...."的样式

    .cnt_text .text img {/*width :auto !important;*/height :auto !important; max-width:660px;} 高度自适应,高度让 ...

  4. MongoDB 复制集模式Replica Sets

    1.概述 复制集是一个带有故障转移的主从集群.是从现有的主从模式演变而来,增加了自动故障转移和节点成员自动恢复. 复制集模式中没有固定的主结点,在启动后,多个服务节点间将自动选举 产生一个主结点.该主 ...

  5. python连接mysql之pymysql模块

    以下demo均以python2中的mysqldb模块 一.插入数据 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 import MySQLdb    conn = MyS ...

  6. github克隆项目中的子模块submodule时遇到的问题

    GitHub真是个开源大宝库,不只能学习代码,还能学习git的使用! 最近在研究Off-the-Record-iOS项目(https://github.com/chrisballinger/Off-t ...

  7. Oracle问题解决(sqlplus无法登陆)

    命令行 sqlplus 无法登陆,常常是用户名/密码错误.监听配置错误或未启动.数据库服务名丢失等等原因. 用户名/密码错误 找到自己设的密码 这全靠自己创建数据库实例时,备份或记住相关信息 若最后没 ...

  8. GNU FORK PTHREAD SIGNALS

    Linux程序设计入门 - fork, pthread, and signals 在UNIX程序设计中,学会fork及signal的运用,算是相当基本的功夫. fork()及signal经常运用在da ...

  9. Node.js回调概念

    什么是回调? 回调是一个异步等效的功能.在完成特定任务回调函数被调用. Node大量使用了回调.Node的所有的API都支持回调这样的一种方式. 例如,一个函数读取一个文件可能开始读取文件,并使得下一 ...

  10. 怎样找到native speaker的感觉