[C] c99int(让VC等编译器自动兼容C99的整数类型)V1.02。源码托

[C] c99int(让VC等编译器自动兼容C99的整数类型)V1.02。源码托管到github、添加CMake编译配置文件、使用doxygen规范注释

作者:zyl910

一、改动简介

  V1.02版的改动如下——

二、改动详述2.1 将源码上传到github

  现在用习惯git了,感觉它很不错。因其支持离线提交等功能,虚拟主机,非常适合分布式开发。   比如有时你突然有了一个灵感,想改进一下自己的代码。可是代码不在身边,改不了。这时有三种办法—— 1) 将代码放入U盘,随身携带。缺点是风险高且已损坏,万一U盘坏了或丢了就麻烦了。而且并不是所有场合都能接U盘。 2) 使用带同步功能的网盘。缺点在于网盘是与账号绑定的,一般只能装在自己固定几台电脑上。 3) 将源码托管到某个源码托管网站。使用版本控制工具来管理。

  可见,使用第3种方案是最好的。顺便能利用版本控制工具来管理源码的变更,可以完全不受顾虑的修改。而前2种方案得手动备份,最怕会因激进想法弄乱代码。   我以前曾尝试过 svn + google code。可是svn是一种集中式版本控制工具,很多操作需要连接到版本库服务器。当连不上版本库服务器,根本没法工作。   后来换成 git+github 就好多了。git支持离线提交,你可以在网络好的时候才将提交推送到版本库服务器上。而且目前访问github比google code容易很多。

  关于git的学习,推荐以下资料—— 1) 入门教程推荐 Travis Swicegood的《版本控制之道——使用Git》()。 2) 高级教程推荐 蒋鑫的《Git权威指南》()。 3) 对于github的,推荐 蒋鑫的《GotGitHub》()。

2.2 调整目录结构

  原先将所有文件都放在一个目录中,显得比较杂乱,不利于管理。   考虑到本项目是类似函数库的项目,有可能会存在多个示例程序,于是最终决定使用这种目录结构—— docs:用于存放文档相关内容。 examples:存放各个示例程序。 inc:存放第三方头文件。 lib:存放第三方的库。 src:存放代码。本项目头文件与实现文件放在一起,这样容易管理一些。

  本项目不需使用inc、lib目录。

  文件清单——

docs/examples/examples/c99inttest/examples/c99inttest/c99inttest.cexamples/c99inttest/c99inttest.dspexamples/c99inttest/c99inttest.dswexamples/c99inttest/c99inttest_2003.slnexamples/c99inttest/c99inttest_2003.vcprojexamples/c99inttest/c99inttest_2005.slnexamples/c99inttest/c99inttest_2005.vcprojexamples/c99inttest/c99inttest_2008.slnexamples/c99inttest/c99inttest_2008.vcprojexamples/c99inttest/c99inttest_2010.slnexamples/c99inttest/c99inttest_2010.vcxprojexamples/c99inttest/c99inttest_2010.vcxproj.filtersexamples/c99inttest/c99inttest_2010.vcxproj.userexamples/c99inttest/c99inttest_2012.slnexamples/c99inttest/c99inttest_2012.vcxprojexamples/c99inttest/c99inttest_2012.vcxproj.filtersexamples/c99inttest/c99inttest_2012.vcxproj.userexamples/c99inttest/c99inttest_bcb.bpfexamples/c99inttest/c99inttest_bcb.bprexamples/c99inttest/c99inttest_bcb.resexamples/c99inttest/CMakeLists.txtexamples/c99inttest/makefilesrc/src/auto_inttypes.hsrc/auto_stdint.hc99int.mainpagec99int_doc.doxygenc99int_docfull.doxygenLICENSEREADME.md

2.3 Makefile文件的修改

  由于现在调整了目录结构,于是Makefile文件也需要修改。例如对示例程序c99inttest来说,一部分代码在“examples/c99inttest/”目录中,另一部分代码在“src/”目录中。这对Makefile文件的修改带来了一定程度的麻烦。如果没解决好路径问题的话,很容易造成编译失败。   因可能存在多个示例程序,所以Makefile可以与示例程序放在一起(examples/c99inttest/),这是只需解决“src/”目录问题就行了。   该问题可分为两个子问题—— 1) 如何让编译器(gcc)找到另一路径上的文件? 2) 如何让make程序找到另一路径上的文件?

  第一个问题的解决办法大家都很熟悉,就是使用gcc的“-I”参数来添加include搜索目录。具体对于Makefile文件来说,可以利用CFLAGS变量,如——

CFLAGS += -Wall -I../../src

  第二个问题的解决办法,大家有可能不太熟悉了。办法是使用vpath语句指定依赖文件的搜索路径。因本项目的“src/”目录下面只有头文件,所以只需要在Makefile文件中添加一行——

vpath %.h ../../src

  关于vpath的详细说明,推荐陈皓的《跟我一起写 Makefile》(),具体位于第4篇()的“四、文件搜寻”节。

  最终c99inttest的Makefile为——

.PHONY : all clean# flagsCC = gccCFLAGS += -Wall -I../../src#LDFLAGS += -L../../lib#LIBS += -lglib# argsRELEASE =0UNICODE =0BITS =EXFLAGS =# 生成模式. 0代表debug模式, 1代表release模式. make RELEASE=1.ifeq ($(RELEASE),0)# debugCFLAGS += -gelse# releaseCFLAGS += -O3 -DNDEBUG//CFLAGS += -O3 -g -DNDEBUGendif# UNICODE模式. 0代表ansi模式, 1代表unicode模式. make UNICODE=1.ifeq ($(UNICODE),0)# ansiCFLAGS +=else# unicodeCFLAGS += -D_UNICODE -DUNICODEendif# 程序位数. 32代表32位程序, 64代表64位程序, 其他默认. make BITS=32.ifeq ($(BITS),32)CFLAGS += -m32elseifeq ($(BITS),64)CFLAGS += -m64elseendifendif# 扩展参数. make EXFLAGS=”-mavx”.CFLAGS += $(EXFLAGS)# makefile path.vpath %.h ../../src# filesTARGETS = c99inttestOBJS = c99inttest.oall : $(TARGETS)c99inttest : $(OBJS)$(CC) -o $@ $^ $(CFLAGS) $(LDFLAGS) $(LIBS)c99inttest.o : c99inttest.c auto_stdint.h auto_inttypes.h$(CC) -c $< $(CFLAGS)clean :$(RM) $(OBJS) $(TARGETS) $(addsuffix .exe,$(TARGETS))

2.4 CMake编译配置文件接受自己的失败面,是一种成熟,更是一种睿智

[C] c99int(让VC等编译器自动兼容C99的整数类型)V1.02。源码托

相关文章:

你感兴趣的文章:

标签云: