Cmake使用例程

cmake使用例程如下

(1)cmake工具需要内核支持sctp模块,需要安装sctp开发包:lksctp - tools 以及lksctp - tools - devel
(2)在Linux系统内安装cmake
(3)如何建立一个包含多个源文件夹的工程

 本文这里以socket 通信为例:
(1)新建以下文件夹
 build、server、client、includes、pubs五个文件夹
 build:是构建工程时需要的文件夹,里面包含client工程和server工程两个文件夹
 server:是存放server.c(服务器端源代码) 和server.h(服务器端源代码头文件)文件的源文件夹
 client:是存放client.c(客户端源代码)和client.h(客户端源代码头文件)文件的源文件夹
 includes:是存放公共使用的头文件,里面包含include.h(可以将常使用的库文件包含在这里)
 pubs:是存放公用函数的文件,此处里面包含出错记录文件error_log.c(出错记录函数)和error_log.h(出错记录函数头文件)

(2)新建好以上文件夹和相应的代码之后,在文件夹中编写CMakeLists.txt文件
 build目录是工程构建的目录,这里不需要编写CMakeLists.txt
 include目录是只包含的头文件目录,也不需要编写CMakeLists.txt文件
 因此只 需要在一下三个文件中中编写CMakeLists.txt文件
 1:pubs:中的CMakeLists.txt文件内容如下,由于是公用文件包含公用的代码,因此只编译生成相应的库文件就好。

 # 这个文件是公用的文件,里面的函数别的代码也需要调用,因此把他编译成库文件,
 # 这里设置库文件的路径就是当前路径,注意(. DIR_PUBS_SRCS)中的PUBS就是这个文件夹的名称
 AUX_SOURCE_DIRECTORY(. DIR_PUBS_SRCS)

 # 设置编译后生成的库文件名称,别的程序再编译的时候,如果调用了这里面的函数就会链接这个库文件
 ADD_LIBRARY ( pubs ${DIR_PUBS_SRCS})
 2:client:中的CMakeLists.txt文件内容如下
 
 # cmake版本的最低要求
 cmake_minimum_required ( VERSION 2.8 )

 # 工程名字
 project (client)

 # 设置cmake编译之后保留源代码
 set(CMAKE_C_FLAGS  "${CMAKE_C_FLAGS} -std=c99")

 # 设置cmake编译之后生成的可执行文件是debug版本
 set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")

 # 设置cmake编译之后生成的可执行文件是relese版本
 #set(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")

 # 设置编译查找库名称
 find_package(Threads REQUIRED)

 # 设置包含的文件路径,这里我们需要包含includes 和公用的pubs两个文件
 include_directories(../includes ../pubs)

 # 设置子文件名称(就这这个源文件包含的文件夹,这里就是软连接的文件名)
 ADD_SUBDIRECTORY(pubs)

 # 设置源文件的位置就是当前文件夹
 AUX_SOURCE_DIRECTORY(. DIR_SRCS)

 # 设置生成可执行文件的名称
 add_executable(client ${DIR_SRCS})

 # 设置生成可执行文件时需要链接的库文件,这里也就是我们公用的pubs编译后生成的.o文件
 target_link_libraries(client pubs ${CMAKE_THREAD_LIBS_INIT})
 
 3:server:中的CMakeLists.txt文件内容如下和上面类似
 # cmake版本的最低要求
 cmake_minimum_required ( VERSION 2.8 )

 # 工程名字
 project (server)

 # 设置cmake编译之后保留源代码
 set(CMAKE_C_FLAGS  "${CMAKE_C_FLAGS} -std=c99")

 # 设置cmake编译之后生成的可执行文件是debug版本
 set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")

 # 设置cmake编译之后生成的可执行文件是relese版本
 #set(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")

 # 设置编译查找库名称
 find_package(Threads REQUIRED)

 # 设置包含的文件路径,这里我们需要包含includes 和公用的pubs两个文件
 include_directories(../includes ../pubs)

 # 设置子文件名称(就这这个源文件包含的文件夹,这里就是软连接的文件名)
 ADD_SUBDIRECTORY(pubs)

 # 设置源文件的位置就是当前文件夹
 AUX_SOURCE_DIRECTORY(. DIR_SRCS)

 # 设置生成可执行文件的名称
 add_executable(server ${DIR_SRCS})

 # 设置生成可执行文件时需要链接的库文件,这里也就是我们公用的pubs编译后生成的.o文件
 target_link_libraries(server pubs ${CMAKE_THREAD_LIBS_INIT})
(3)进入client文件夹和server文件夹执行
 ln -s ../pubs pubs
 (将上一层目录中的pubs目录软连接到这里,为什么药进行软连接呢?就是因为这里使用了pubs中的文件的代码)

(4)进入build目录,新建两个工程文件server和client,如果只有一个工程就建一个工程名就好
 执行
 cmake ../../server (生成对应Makefile文件) 再执行make
 cmake ../../client (生成对应的Makefile文件)再执行make
(5)执行上述操作之后,如果没有错误就会出现相对应的可执行文件名,这里是server和client

猜你喜欢

转载自blog.csdn.net/Lq19880521/article/details/77776076