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就行了。

浙公网安备 33010602011771号