【持续。。更新】总结一下C++开发时的General Principle

0、学习的时候用Editor、Make、Compiler、Linker以及Debugger还有各种工具,了解开发细节。实战的时候用IDE加快开发速度。

  除非你的项目简单到了只需要命令:compiler a.cpp就能生成a.exe。否则,请使用良好的文件组织结构:

    your_project_folder\

      src\

        module_a\

          a.cpp

          ax.cpp

          axx.cpp

        module_b\

          b.cpp

          bx.cpp

          bxx.cpp

      bin\

      lib\

        library_a\

          xxx.lib

          yyy.lib

          zzz.lib

        library_b\

          hhh.lib

          jjj.lib

          kkk.lib

      include\

        library_a\

          iii.h

          uuu.h

        library_b\

          ggg.h

          fff.h

        module_a\

          a.h

          ax.h

          axx.h

        module_b\

          b.h

          bx.h

          bxx.h

  我平时使用的Makefile可以从这里下载到,里面随便一个C++demo下载下来就有Makefile,可以参考(我不是很深入的了解Makefile,所以写的可能有些啰嗦、、不过好歹能用。。。),下面贴上我自己平时用的Makefile模板(配合Visual Studio的NMAKE程序,换到linux下其实也就是改改compiler和linker还有一些其他操作系统相关的指令就能用,差不太多)

  

 1 # compiler
 2 CC = cl
 3 # linker
 4 LINK = link
 5 # libraries
 6 LIB_ZTHREAD = /LIBPATH:E:\cppwksp\zthreaddemo_win\libs\zthread
 7 LIB_SYNC_OUTPUT = /LIBPATH:E:\cppwksp\zthreaddemo_win\demo\C11\531-SynchronizedOutput\lib
 8 # headers
 9 HEADER_PATH = /I E:\cppwksp\zthreaddemo_win\include /I include
10 # options
11 EHSC = /EHsc
12 COMPILATION_ONLY = /c
13 C_OUT = /Fo:
14 L_OUT = /OUT:
15 # compiler & linker debug option, to disable debug, replace ‘/Zi‘ & ‘/DEBUG‘ with empty strings
16 # C_DEBUG = /Zi
17 # L_DEBUG = /DEBUG
18 C_DEBUG =
19 L_DEBUG =
20 # targets
21
22 bin\test.exe: bin lib\SynchronizedOutput_win32.lib obj\SynchronizedOutputTask.obj obj\NormalTask.obj obj\Task.obj obj\main.obj
23     $(LINK) $(L_DEBUG) $(LIB_ZTHREAD) $(LIB_SYNC_OUTPUT) $(L_OUT)bin\test.exe obj\main.obj obj\SynchronizedOutputTask.obj obj\NormalTask.obj obj\Task.obj SynchronizedOutput_win32.lib ZThread_win32.lib
24
25 lib\SynchronizedOutput_win32.lib: lib obj obj\SynchronizedOutput.obj
26     LIB $(L_OUT)lib\SynchronizedOutput_win32.lib obj\SynchronizedOutput.obj
27
28 obj\SynchronizedOutput.obj: src\SynchronizedOutput.cpp include\SynchronizedOutput.h
29     $(CC) $(C_DEBUG) $(EHSC) $(HEADER_PATH) $(COMPILATION_ONLY) src\SynchronizedOutput.cpp $(C_OUT)obj\SynchronizedOutput.obj
30
31 obj\main.obj: src\main.cpp include\SynchronizedOutputTask.h include\NormalTask.h include\Task.h
32     $(CC) $(C_DEBUG) $(EHSC) $(HEADER_PATH) $(COMPILATION_ONLY) src\main.cpp $(C_OUT)obj\main.obj
33
34 obj\SynchronizedOutputTask.obj: src\SynchronizedOutputTask.cpp include\SynchronizedOutputTask.h include\Task.h include\SynchronizedOutput.h
35     $(CC) $(C_DEBUG) $(EHSC) $(HEADER_PATH) $(COMPILATION_ONLY) src\SynchronizedOutputTask.cpp $(C_OUT)obj\SynchronizedOutputTask.obj
36
37 obj\NormalTask.obj: src\NormalTask.cpp include\NormalTask.h include\Task.h
38     $(CC) $(C_DEBUG) $(EHSC) $(HEADER_PATH) $(COMPILATION_ONLY) src\NormalTask.cpp $(C_OUT)obj\NormalTask.obj
39
40 obj\Task.obj: src\Task.cpp include\Task.h
41     $(CC) $(C_DEBUG) $(EHSC) $(HEADER_PATH) $(COMPILATION_ONLY) src\Task.cpp $(C_OUT)obj\Task.obj
42
43 # folders
44
45 bin:
46     mkdir bin
47
48 obj:
49     mkdir obj
50
51 lib:
52     mkdir lib
53
54 # clean
55 # bin, lib, obj folders and pdb files
56
57 .PHONY: clean
58 clean:
59     -rmdir /s /q bin
60     -rmdir /s /q lib
61     -rmdir /s /q obj
62     -del *.pdb

  关于Makefile,我写了一篇笔记很重要,点此查看

1、头文件的#include顺序:自己写的头文件、第三方工具的头文件、标准头文件,尽量从上到下这样安排顺序

   头文件一定要写上#ifndef xxx #define xxx #endif的header guard

   头文件中除了template和inline以外,都只写declaration不要把implementation代码写在头文件里,免得xxx redefined错误,保持一个好的习惯

2、头文件里不要包含:using指令和using namespace指令

  头文件中不要初始化static member,避免xxx redefined错误,放到cpp文件中去初始化

3、如果你有一个class,尽量为这个class建立一个单独的header文件和cpp文件,需要隐藏实现细节的时候除外

4、待补充。。。

时间: 2024-10-17 18:14:00

【持续。。更新】总结一下C++开发时的General Principle的相关文章

持续更新中 --- IOS移动开发中的优质资源

在我们做IOS APP的开发过程中, 需要很多设计, 产品, 技术, 运营等方面的技巧和资源. 现将其整理汇总, 本文会一直持续更新. 敬请关注. 设计 Dribbble Dribbble是一个面向创作家.艺术工作者.设计师等创意类作品的人群,提供作品在线服务,供网友在线查看已经完成的作品或者正在创作的作品的交流网站. 其作品整体质量非常高,许多摄影师.设计师和其他创意产业人士都喜欢在这里展示其未完成的设计,通过与其他设计师的共同探讨来激发自己的灵感. Dribbble还针对手机推出了相应的软件

(转)iOS开发——来改掉那些被禁用的方法吧(持续更新中)

iOS平台在快速的发展,各种接口正在不断的更新.随着iOS9的发布,又有一批老方法不推荐使用了,你若调用这些方法,运行的结果是没有问题的,但是会出现警告“***is deprecated :first deprecated in iOS 9.0 - Use *******”.就像如图所示: 在实际项目开发中,我们要秉承一个信念就是:要把每一个警告当做错误来处理,并解决每一个警告.你想想,你运行一个项目,就算运行成功了,但是出现几十个.甚至几百个黄黄的警告,心情是不是很糟糕呢?我将在这篇博客结合我

android开发开源宝贝——持续更新。。。

2016年11月11日更新 http://www.apkbus.com/forum-417-1.html http://p.codekk.com/detail/Android/hejunlin2013/LivePlayback www.codekk.com https://github.com/Trinea/android-open-project Android 开源项目分类汇总 我们的微信公众号:codekk.二维码如下: 专注于 Android 开源分享.源码解析.框架设计.Android

java开发中遇到的问题及解决方法(持续更新)

摘自 http://blog.csdn.net/pony12/article/details/38456261 java开发中遇到的问题及解决方法(持续更新) 工作中,以C/C++开发为主,难免与其他服务和Web进行交换,Java开发必不可少,又不想动用Eclipse大家伙,只能自己动手编写脚本进行Java代码的编译和运行,期间遇到的一些问题,记录下来供自己和大家参考.1)软件包不存在/软件包 javax.jms 不存在    这是由于javac编译时找不到javax.jms所在的软件包,因此将

电视的应用开发注意事项[持续更新]

来乐视快3个月了,也做TV应用3个月了,老大上来就让我独立开发一个智能电视的应用,虽然现在已成功上线了,但感觉问题还是很多的..... 把一些经验总结一下,免得以后自己以后绕弯路. 电视控制大多数依赖遥控器,遥控器有个缺点,就是用户很有可能疯狂的快速的按按键,所以一定不要响应每次按键事件,可以把每个按键事件的处理流程放进Runnable里,然后用postDelay的方式来处理事件. 电视是多个厂商开发,所以遥控器的按键键值会有出入,所以要有个统一转换的功能类. 电视的焦点是个问题,所以当用户按方

使用Android Studio开发android应用(持续更新)

使用Android Studio开发android应用 --------------------转载请注明出处:coder-pig 前言: 在2013年5月16日开发者大会上,google公司发布了一个新的集成开发环境:Android Studio 该IDE是专门用来开发安卓应用程序的,如果你需要使用Java的话就需要下载Java的IDE了! google慢慢地已经把重心放到Android Studio上了,所以有必要熟悉下这个IDE开发环境! 本篇博文会不定期地进行更新!对遇到的问题以及一些新

关于ASP.NET MVC开发设计中出现的问题与解决方案汇总 【持续更新】

最近一直用ASP.NET MVC 4.0 +LINQ TO SQL来开发设计公司内部多个业务系统网站,在这其中发现了一些问题,也花了不少时间来查找相关资料或请教高人,最终都还算解决了,现在我将这些问题及对应的解决方案都整理汇总出来,供大家参供,有不对之处或有更好的解决办法,欢迎在本文评论,谢谢! 问题一:执行类似语句:dbDataContext.TableName.Join(modelList as List<实体对象类型>,t1=>t1.id,t2=>t2.id,(t1,t2)=

Android 开发大坑汇总(持续更新)

android开发大坑汇总 1.EditText --> gravity与hint冲突 表现在2.X版本当在EditText设置android:gravity="center"属性后,android:hint会无效. 解决办法:再添加android:ellipsize="start"就会好了. 感觉:很无厘头的大坑,记住吧!要不旧机子就只有显示不出来的份. 2.DatePickerDialog --> 时间超过最大值变为最小时间时显示出错. 解决办法:暂

普元EOS开发积累第一篇(常见错误解决方法) 持续更新

普元启动服务失败的解决方法 当多个人同时使用一个数据库的时候,启动普元控制台会一直停留在rcall,然后显示一个超时的警告,那样就需要修改一下普元的一个定时器配置项. 安装目录下\Primeton\Platform\apps_config\default\config 中的一个user-config.xml文件 将下列代码中高亮字段中的true改为false即可  <module name="Schedule">          <group name="