配置一个干净的VS C++工程目录结构
2014-01-27 02:07
746 查看
众所周知,VS的工程目录十分复杂,一堆ncb,project,filter,user等等乱七八糟的文件,与源码cpp/h等放在一起十分的恶心。
而且debug/release目录里又有十分多的obj,sbr,bsr等文件。
这里介绍个手工修改工程模版的方法,实现每次新建工程时,自动生成的目录结构十分的清晰
效果结构:
/解决方案名/工程名称/src/* // 只有cpp/c/h/hpp文件,很清晰
/解决方案名/工程名称/res/* // 什么ico,bmp,mainfest啊,都在这里
/解决方案名/工程名称/* // 工程配置文件,以及def/rc两个文件
/解决方案名/obj/工程名称/debug/* // 一些不需要关心的临时文件
/解决方案名/obj/工程名称/release/* // 一些不需要关心的临时文件
/解决方案名/out/ // 编译出来的exe,dll等,放一个目录里,包括同一个解决方案下的其他工程模块
===================
D:\dev\vs2003\Vc7\VCWizards\2052\common.js
第一处修改地方
查找GetTargetName (......)
在这行后面添加上
这样就实现了创建工程时目录自动分类了,不过在工程里添加新代码文件时还不是自动归类, 这方面暂时未解决,若哪天解决了我再编辑写这文章,现在只能在添加的时候,手工加入src/路径。
若对于头文件想自动归类到inc目录的话,请自行修改。
--
第二处修改地方
查找AddCommonConfig
在函数前面加一句
这个有两处,一个debug,一个release,分别修改下。
另外,由于我们debug/release都是放out目录里,所以需要设置成两个不同的最终exe名称。这里是增加个D表示是debug版本.
搜索 AddFilesToProject( ,在其try的第一行加入以下指令(其实这个就在刚才修改文件归类的前面就是了)
后面的insert_includes是解决rc路径的头文件问题。以及其他放在工程目录下的cpp/h对src的引用路径问题
over
本方法已经在vs2003/2008/2010中试验通过,但有部分向导创建的文件还是有部分遗留文件问题,但基本不多,可以自己手工移动下
而且debug/release目录里又有十分多的obj,sbr,bsr等文件。
这里介绍个手工修改工程模版的方法,实现每次新建工程时,自动生成的目录结构十分的清晰
效果结构:
/解决方案名/工程名称/src/* // 只有cpp/c/h/hpp文件,很清晰
/解决方案名/工程名称/res/* // 什么ico,bmp,mainfest啊,都在这里
/解决方案名/工程名称/* // 工程配置文件,以及def/rc两个文件
/解决方案名/obj/工程名称/debug/* // 一些不需要关心的临时文件
/解决方案名/obj/工程名称/release/* // 一些不需要关心的临时文件
/解决方案名/out/ // 编译出来的exe,dll等,放一个目录里,包括同一个解决方案下的其他工程模块
===================
D:\dev\vs2003\Vc7\VCWizards\2052\common.js
第一处修改地方
查找GetTargetName (......)
在这行后面添加上
var extName = strTarget.substring(strTarget.lastIndexOf('.')+1, strTarget.length).toLowerCase(); if(strTarget.lastIndexOf('/') == -1 && strTarget.lastIndexOf('\\') == -1) { var filename = strTarget.toLowerCase(); if( filename == "readme.txt" ) { continue; } else if( filename == "resource.h" ) { // 必须与rc放同目录 } else if(extName == "cpp" || extName == "c" || extName=="h" || extName == "hpp" || extName=="inl" || extName == "inc" ) { strTarget = "src/" + strTarget; } else if(extName == "def" || extName == "rc" ) { //rc文件必须得放目录下,因为一些模板文件指定了绝对路径,很蛋疼 } else{ strTarget = "res/" + strTarget; } }
这样就实现了创建工程时目录自动分类了,不过在工程里添加新代码文件时还不是自动归类, 这方面暂时未解决,若哪天解决了我再编辑写这文章,现在只能在添加的时候,手工加入src/路径。
若对于头文件想自动归类到inc目录的话,请自行修改。
--
第二处修改地方
查找AddCommonConfig
在函数前面加一句
g_macroName_Configuration = null;然后在var config = oProj.Object.Configurations("Debug"); 和 config = oProj.Object.Configurations("Release"); 后面分别加上以下内容
if(g_macroName_Configuration == null){ g_macroName_Configuration = config.IntermediateDirectory; // 只取一次初始配置,防止在方案下第二个工程使用了第一个工程的配置 } var macroName_Configuration = g_macroName_Configuration; // VER <= VS2008 IS "$(ConfigurationName)\"; // VER >= VS2010 IS "$(Configuration)\" // 识别debug/release所用的宏名称,这里直接使用原先的内容,动态识别. //config.IntermediateDirectory = "$(SolutionDir)obj/$(ProjectName)/"+macroName_Configuration; // 存放obj到解决方案下 config.IntermediateDirectory = "e:/tmp-dev/$(SolutionName)/$(ProjectName)/"+macroName_Configuration; // 也可以放在固定位置,这样工程目录就又更清晰了 config.OutputDirectory = "$(SolutionDir)out\\"; // 将exe,dll,pdb放在out目录。
这个有两处,一个debug,一个release,分别修改下。
另外,由于我们debug/release都是放out目录里,所以需要设置成两个不同的最终exe名称。这里是增加个D表示是debug版本.
搜索 AddFilesToProject( ,在其try的第一行加入以下指令(其实这个就在刚才修改文件归类的前面就是了)
function vs_add_debug_name() { var dbg_config = oProj.Object.Configurations("Debug"); var rules = dbg_config.Rules; if(rules != null) { var ob = rules.Item("ConfigurationGeneral"); ob.SetPropertyValue( "TargetName", ob.GetUnevaluatedPropertyValue("TargetName") + "D" ); } else { function InsertDebugFileName(filepath) { var dotpos = filepath.lastIndexOf('.'); if(dotpos > 0 ) { filepath = filepath.substr(0, dotpos) + "D" + filepath.substr(dotpos); } return filepath; }; var dbg_link = dbg_config.Tools("VCLinkerTool"); if(dbg_link){ dbg_link.OutputFile = InsertDebugFileName(dbg_link.OutputFile); dbg_link.ProgramDatabaseFile = InsertDebugFileName(dbg_link.ProgramDatabaseFile); } var dbg_lib = dbg_config.Tools("VCLibrarianTool"); if(dbg_lib){ dbg_lib.OutputFile = InsertDebugFileName(dbg_lib.OutputFile); } } }; vs_add_debug_name(); function insert_includes(dir){ function insert_config_include(name, dir) { var config = oProj.Object.Configurations(name); var cl_tools = config.Tools("VCCLCompilerTool"); if(cl_tools){ cl_tools.AdditionalIncludeDirectories = dir + ";" + cl_tools.AdditionalIncludeDirectories; } var res_tools = config.Tools("VCResourceCompilerTool"); if(res_tools){ res_tools.AdditionalIncludeDirectories = dir + ";" + res_tools.AdditionalIncludeDirectories; } }; insert_config_include("Debug", dir); insert_config_include("Release", dir); } insert_includes("res"); insert_includes("src"); insert_includes(".");
后面的insert_includes是解决rc路径的头文件问题。以及其他放在工程目录下的cpp/h对src的引用路径问题
over
本方法已经在vs2003/2008/2010中试验通过,但有部分向导创建的文件还是有部分遗留文件问题,但基本不多,可以自己手工移动下
相关文章推荐
- 利用VS根据文件目录结构创建C++工程自己简单实现的方法
- VS2015工程目录结构 + OpenCV环境配置 的最优解决方案
- Android核心基础-3. 开发一个Android程序-3.4. 了解工程目录结构
- VS工程配置输出debug版dll及copy到指定目录,执行bat脚本的方法
- VS2010 C++目录配置
- 好久没更新博客了,今天给大家分享一下Android中的资源与国际化的问题,通常我们新建一个Android工程,目录结构如下图所示: 我们主要看一下layout与values目录,layou
- VS项目配置中 C++目录--包含目录(or库目录继承值的删除问题)
- vs2015中复制C++ DLL 和.pdb文件到C#工程中bin目录的设置方法
- VS项目配置中 C++目录--包含目录(or库目录继承值的删除问题)
- VS中CUDA与C++工程项目的配置
- Eclipse中一个Maven工程的目录结构
- Cocos2d-X游戏【泰然网《跑酷》】JS到C++移植2:如何新建一个项目,引擎目录结构介绍
- 【VS开发】利用VS2015的工程文件来复制另外一个工程的配置的使用说明
- 微信小程序自学第一课:工程目录结构与.json文件配置
- 配置一个Lua工程(支持命令行运行 和 vs断点调试)
- VS项目配置中 C++目录--包含目录(or库目录继承值的删除问题)
- vs2010 vs2013统一修改所有工程的目录配置
- 第五十七篇:VS2015建立一个完整的c++工程:头文件.h 源文件.cpp,自动生成类
- Eclipse 工程配置与目录结构及各种文件夹(常用插件)
- android studio工程目录结构解析及svn配置