首页 > 代码库 > 【持续。。更新】总结一下C++开发时的General Principle

【持续。。更新】总结一下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 include10 # options11 EHSC = /EHsc12 COMPILATION_ONLY = /c13 C_OUT = /Fo:14 L_OUT = /OUT:15 # compiler & linker debug option, to disable debug, replace ‘/Zi‘ & ‘/DEBUG‘ with empty strings16 # C_DEBUG = /Zi17 # L_DEBUG = /DEBUG18 C_DEBUG = 19 L_DEBUG = 20 # targets21 22 bin\test.exe: bin lib\SynchronizedOutput_win32.lib obj\SynchronizedOutputTask.obj obj\NormalTask.obj obj\Task.obj obj\main.obj23     $(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.lib24     25 lib\SynchronizedOutput_win32.lib: lib obj obj\SynchronizedOutput.obj26     LIB $(L_OUT)lib\SynchronizedOutput_win32.lib obj\SynchronizedOutput.obj27 28 obj\SynchronizedOutput.obj: src\SynchronizedOutput.cpp include\SynchronizedOutput.h29     $(CC) $(C_DEBUG) $(EHSC) $(HEADER_PATH) $(COMPILATION_ONLY) src\SynchronizedOutput.cpp $(C_OUT)obj\SynchronizedOutput.obj30 31 obj\main.obj: src\main.cpp include\SynchronizedOutputTask.h include\NormalTask.h include\Task.h32     $(CC) $(C_DEBUG) $(EHSC) $(HEADER_PATH) $(COMPILATION_ONLY) src\main.cpp $(C_OUT)obj\main.obj33 34 obj\SynchronizedOutputTask.obj: src\SynchronizedOutputTask.cpp include\SynchronizedOutputTask.h include\Task.h include\SynchronizedOutput.h35     $(CC) $(C_DEBUG) $(EHSC) $(HEADER_PATH) $(COMPILATION_ONLY) src\SynchronizedOutputTask.cpp $(C_OUT)obj\SynchronizedOutputTask.obj36     37 obj\NormalTask.obj: src\NormalTask.cpp include\NormalTask.h include\Task.h38     $(CC) $(C_DEBUG) $(EHSC) $(HEADER_PATH) $(COMPILATION_ONLY) src\NormalTask.cpp $(C_OUT)obj\NormalTask.obj39 40 obj\Task.obj: src\Task.cpp include\Task.h41     $(CC) $(C_DEBUG) $(EHSC) $(HEADER_PATH) $(COMPILATION_ONLY) src\Task.cpp $(C_OUT)obj\Task.obj42     43 # folders44 45 bin:46     mkdir bin47 48 obj:49     mkdir obj50     51 lib:52     mkdir lib53     54 # clean55 # bin, lib, obj folders and pdb files56 57 .PHONY: clean58 clean:59     -rmdir /s /q bin60     -rmdir /s /q lib61     -rmdir /s /q obj62     -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、待补充。。。

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