Debug_Info跨平台动态库工程建立

    代码是编写完了,代码总归是代码,还不能进行生成具体的动态库。因此,为了完整性,将利用CMake这个跨平台公具进行创建工程,具体CMake的使用将不详细讲解,因为自己的水平也是菜鸟级别,还好工程小,不需要太多的知识。但是,对这个工具的应用,同样是很重要的,这事未来的趋势。比如:Mysql的当前版本,源码就需要通过CMake进行建立工程。

    建立工程的基础:

    1、安装CMake工具

    2、windows下安装Visual Studio 开发工具;类Unix下有gcc等就ok了。

    一、创建文件夹

    工程建立之前,先建立几个文件夹:

    src:存放源代码文件和定义文件

    include:存放头文件

    build:用于生成工程,利用CMake的外部部署方法

    二、创建根目录下的CMakeLists.txt文件

    CMakeLists.txt文件的功能是CMake解析的文件。

    这里,我编写了两个CMakeLists.txt文件,一个位于根路径下,即和创建的文件夹放在一起。

    创建CMakeLists.txt文件,添加内容为:   

cmake_minimum_required(VERSION 2.6)

PROJECT(DEBUG_INFO)
ADD_SUBDIRECTORY(src)

    非常简单吧,含义也简单的不能再简单了:

    第一个为CMake的最低版本;第二个为工程的名字;第三个为增加子文件夹src。如果定义了第三个内容,那么就要在src文件夹里建立一个CMakeLists.txt文件,做具体的工程建立。

    三、创建src目录下的CMakeLists.txt文件

    src下的文件是具体生成项目的,内容如下:

PROJECT(DEBUG_INFO)

INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}
/include)

SET(DEBUG_INFO_SOURCES ..
/include/debug_info.h ./debug_info.c)

SET(LIBRARY_OUTPUT_PATH ${CMAKE_SOURCE_DIR}
/bin)
ADD_DEFINITIONS(
-D__DEBUG_INFO_API_EXPORTS )

IF(WIN32)
ADD_LIBRARY(libdebug_info SHARED ${DEBUG_INFO_SOURCES} debug_info.def)
ELSE(WIN32)
ADD_LIBRARY(debug_info SHARED ${DEBUG_INFO_SOURCES} debug_info.def)
SET_TARGET_PROPERTIES(debug_info PROPERTIES CLEAN_DIRECT_OUTPUT
1)
SET_TARGET_PROPERTIES(debug_info PROPERTIES VERSION
8.1 SOVERSION 1)
ADD_LIBRARY(debug_info_static STATIC ${DEBUG_INFO_SOURCES} debug_info.def)
SET_TARGET_PROPERTIES(debug_info_static PROPERTIES OUTPUT_NAME
"debug_info")
SET_TARGET_PROPERTIES(debug_info_static PROPERTIES CLEAN_DIRECT_OUTPUT
1)
ENDIF(WIN32)

    这个文件有些复杂了,简要的解释一下吧!

    第一行跟上一个文件一样;第二个是头文件的引用位置,其中${CMAKE_SOURCE_DIR}是CMake定义的一个变量,只想CMake的文件目录;SET是设置变量的值,第三行和第四行分别定义了两个变量的内容;第五行是用于设置预定义的内容;接下来是用于跨平台的内容了,ADD_LIBRARY是生成的库文件,第二个参数可以有几种:STATIC、SHARED、MODULE、EXCLUDE_FROM_ALL,是用于生成库的形式,当然本工程是生成动态库的,此外下面的是为了在类Unix下生成的库类型。这方面的内容最好还是查一下文档,再次申明我也是个菜鸟水平,如果有什么解释错了,大家积极批评指正。

    四、copy文件到工程目录

    将头文件debug_info.h复制到include文件夹中;

    将源代码debug_info.c复制到src文件夹下。此外还要定义一个debug_info.def文件,主要用于生成库时export的函数方法。只有这样才能在调用库时,才能应用库中的方法。   

LIBRARY LIBDEBUG_INFO
DESCRIPTION
'Debug_info Dynamic Link Library'
VERSION
0.1.0.1
EXPORTS
debug_info_init
debug_info_fini
debug_info_rec

    好了,一切都具备了,只要在build文件夹下进行cmake .. 就行了。这样就生成了工程了。

    如果是windows的话,就可以在build中打开工程项目进行编译就行了。如果在类Unix下的话,就更简单了,直接make就行了。

posted @ 2011-04-04 17:16  uber_niello  阅读(333)  评论(0)    收藏  举报